2017-01-24 1 views
0

Ich versuche, JUnit-Tests parallel unter Verwendung der experimentellen Funktion ParallelComputer auszuführen, jedoch weiß ich nicht, wie man jede der Testklassen vor dem Start der Tests vorinitialisiert.Wie initialisiert man JUnit-Testklassen vor der parallelen Ausführung?

Das klassische Beispiel, wie diese verwendet werden sollen, ist wie folgt (wie in der folgenden GitHub link gezeigt). Wie initialisiere ich für das Beispiel die ParallelTest1 und ParallelTest2 Klassen mit freigegebenen Daten vor dem Starten der parallelen Thread-Tests. Ich konnte dies über Konstruktoren in jeder der Klassen tun, aber ich muss sicherstellen, dass beide Klassen vor dem Start vollständig initialisiert werden. Dieses Problem ist wahrscheinlich nicht spezifisch für die Art und Weise, wie ich den Test parallel durchführen möchte, sondern eher, wie einige spezielle Schlüsselwörter verwendet werden, um zu verhindern, dass initialisierte Objekte gestartet werden, bis sie benötigt werden. Im Idealfall könnte das Beispiel ParallelComputerTest diese freigegebenen Daten in seinem Konstruktor initialisieren. In diesem Fall könnten die verschachtelten statischen parallelen Testklassen jedoch Zugriff auf diese Instanzdaten erhalten.

public class ParallelComputerTest { 

    @Test 
    public void test() {  
     Class[] cls={ParallelTest1.class,ParallelTest2.class }; 

     //Parallel among classes 
     JUnitCore.runClasses(ParallelComputer.classes(), cls); 

     //Parallel among methods in a class 
     JUnitCore.runClasses(ParallelComputer.methods(), cls); 

     //Parallel all methods in all classes 
     JUnitCore.runClasses(new ParallelComputer(true, true), cls);  
    } 
    public static class ParallelTest1{ 
     @Test public void a(){} 
     @Test public void b(){} 
    } 
    public static class ParallelTest2{ 
     @Test public void a(){} 
     @Test public void b(){} 
    } 
} 

Antwort

1

Verwenden @Before für Set-Ups und @After für saubere Höhen.

Zum Beispiel Konsolenausgabe zu testen, stelle ich vor Ströme und sauberes Ergebnis nach dem Test wie folgt aus:

@Before 
public void setUpStreams() { 
    System.setOut(new PrintStream(outContent)); 
    System.setErr(new PrintStream(errContent)); 
} 

@After 
public void cleanUpStreams() { 
    System.setOut(null); 
    System.setErr(null); 
} 

HINWEIS: diese Probleme mit TestSuite, weiß nicht, ob auch mit ParallelTest verursachen können. Wenn Sie einige Probleme haben UND Sie JUnit 4.7 oder höher verwenden, möchten Sie vielleicht this link to rules feature

+0

überprüfen, also gehören die Before & After zum ParallelComputerTest oder zum ParallelTest [n] nach meinem Beispiel. Wenn der erste, wie kann ich diese initialisierten Daten mit den Klassen Instanzen ParallelTest [n] teilen, sobald sie erstellt werden? – johnco3

+1

wenn vor und nach jeder Methodenausführung, die mit '@Test' markiert ist, nicht die statischen ausgeführt werden ... –

Verwandte Themen