2016-08-02 38 views
0

Ich schreibe Junit Testfall mit Spring und Maven. Ich möchte Junit Testfälle parallel laufen lassen, dafür habe ich Maven Surefire Plugin Parallel Property verwendet. Diese Eigenschaft funktioniert nach Bedarf. Aber in meinem Testfall gibt @Autowired null für den 2. Thread zurück.Spring @Autowired zurückgeben Null beim Launchen von Threads in Maven todsichere Plugin

pom.xml

<groupId>org.apache.maven.plugins</groupId> 
<artifactId>maven-surefire-plugin</artifactId> 
<version>2.18.1</version> 
<configuration> 
    <parallel>methods</parallel> 
    <threadCount>5</threadCount>        
</configuration> 

Class1.java

@Component 
@Scope("prototype") 
public class Class1 { 
    public void setParam(String s) {} 
} 

Class2.java

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(classes = { ApplicationConfiguration.class }, loader = AnnotationConfigContextLoader.class) 
public class Class2 { 
    @Autowired 
    Class1 class1; 

    @Before 
    public void setInitialValue(){ 
     class1.setParam("test"); 
    } 

    @Test 
    public void run1() { 
    } 

    @Test 
    public void run2() {} 
} 

In diesem Code run1 und run2 Methoden parallel genannt werden, aber wenn Faden 2 läuft , class1 Objekt in Class2, setInitialValue() Methode wirft einen NullPointerException.

+0

Ja, Sie haben Recht, ich habe verpasst zu setzen ", es wird class1.setParam (" test ") –

+0

nur in dieser Frage sein. Mein Problem ist, ich bekomme null für Klasse1 Objekt in dieser Zeile class1.setParam (" Test "); –

+0

Setter für die Variable/Klasse und in welcher Klasse –

Antwort

0

Wahrscheinlich ein bisschen spät, aber immer noch. Bei Verwendung von parallel=methods erstellt JUnit nur eine Runner-Instanz pro Testklasse, die von mehreren Threads verwendet wird.

Bei der Verwendung von erstellt JUnit pro Thread einen Runner mit einem dedizierten TestContextManager, der das Problem beheben sollte.