Ich verwende JUnit 4 in Eclipse. Ich habe einige Testklassen in meinem Paket und möchte sie alle ausführen. Wie geht das?
Antworten
Zu viele Anzeigen?Wenn Sie in Eclipse mit der rechten Maustaste auf den Ordner klicken und Run As JUnit Test wählen, werden nur die Tests in diesem Ordner ausgeführt (d.h. Tests in verschachtelten Unterordnern werden nicht ausgeführt). Um alle Tests in einem Verzeichnis einschließlich der Tests in verschachtelten Verzeichnissen auszuführen, müssen Sie etwas wie googlecode.junittool box verwenden.
Auf diese Weise habe ich etwas wie das Folgende erstellt
package com.mycompany.myproject.mymodule;
import org.junit.runner.RunWith;
import com.googlecode.junittoolbox.SuiteClasses;
import com.googlecode.junittoolbox.WildcardPatternSuite;
@RunWith(WildcardPatternSuite.class)
@SuiteClasses({ "**/*Test.class" })
public class RunAllMyModuleTests {
}
Ich fügte die erforderlichen Abhängigkeiten (jar-Dateien) mit diesem in meinem mavin build (zusätzlich zu den junit Abhängigkeit):
<dependency>
<groupId>com.googlecode.junit-toolbox</groupId>
<artifactId>junit-toolbox</artifactId>
<version>1.5</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit-dep</artifactId>
<version>4.8.2</version>
</dependency>
Wenn Sie mit der rechten Maustaste auf diese Klasse klicken und Als JUnit-Test ausführen wählen, werden alle Tests im angegebenen Verzeichnis ausgeführt, einschließlich aller Tests in verschachtelten Unterordnern.
Mit JUnit 4 verwende ich gerne eine annotierte AllTests
Klasse:
@RunWith(Suite.class)
@Suite.SuiteClasses({
// package1
Class1Test.class,
Class2test.class,
...
// package2
Class3Test.class,
Class4test.class,
...
})
public class AllTests {
// Junit tests
}
und, um sicher zu sein, dass wir nicht vergessen, einen TestCase hinzuzufügen, habe ich einen Abdeckungstest (prüft auch, ob jede öffentliche Methode getestet wird).
Ich habe eine AllTests
Klasse, damit ich alle Tests auch von der Kommandozeile aus ausführen kann:
public final class AllTests
{
/**
* Returns a <code>TestSuite</code> instance that contains all the declared
* <code>TestCase</code> to run.
*
* @return a <code>TestSuite</code> instance.
*/
public static Test suite()
{
final TestSuite suite = new TestSuite("All Tests");
suite.addTest(Test1.suite());
suite.addTest(Test2.suite());
suite.addTest(Test3.suite());
return suite;
}
/**
* Launches all the tests with a text mode test runner.
*
* @param args ignored
*/
public static final void main(String[] args)
{
junit.textui.TestRunner.run(AllTests.suite());
}
} // AllTests
Wo jede Testklasse definiert
/**
* Returns a <code>TestSuite</code> instance that contains all
* the declared <code>TestCase</code> to run.
*
* @return a <code>TestSuite</code> instance.
*/
public static final Test suite()
{
return new TestSuite(Test1.class); // change the class accordingly
}
Mit JUnit5 können Sie ganz einfach eine "Suite"-Klasse erstellen, die alle Tests in einem Paket (oder sogar Unterpaketen, es funktioniert rekursiv) ausführt:
@RunWith(JUnitPlatform.class)
@SelectPackages("my.test.package")
public class MySuite {
}
Sobald das erledigt ist, können Sie diese Suite mit "Run as Test" ausführen.
- See previous answers
- Weitere Antworten anzeigen