Ответ Junit3: создайте TestSuite, который создает необходимые вам экземпляры TestCases, причем каждый TestCase инициализируется в соответствии с вашими динамическими данными. Комплект будет работать как единое целое в одном экземпляре JVM, но отдельные TestCases не зависят друг от друга (вызывается setUp, tearDown, обработка ошибок правильна, отчеты дают то, что вы просили, и т. Д.)
Реальная реализация может быть немного неуклюжей, потому что TestCase связывает Имя теста с МЕТОДОМ, который нужно запустить, но это можно обойти.
Обычно мы просто объединяем комплект с динамическими тестовыми примерами в одном классе и используем метод suite () для получения TestSuite. Например, задача Ant JUnit достаточно умна, чтобы заметить это.
public class DynamicTest extends TestCase {
String filename ;
public DynamicTest ( String crntFile ) {
super("testMethod");
filename = crntFile ;
}
// This is gross, but necessary if you want to be able to
// distinguish which test failed - otherwise they all share
// the name DynamicTest.testMethod.
public String getName() {
return this.getClass().getName() + " : " + filename ;
}
// Here's the actual test
public void testMethod() {
File f = new File( filename ) ;
assertTrue( f.exists() ) ;
}
// Here's the magic
public static TestSuite suite() {
TestSuite s = new TestSuite() ;
for ( String crntFile : getListOfFiles() ) {
s.addTest( new DynamicTest(crntFile ) ) ;
}
return s ;
}
}
Конечно, вы можете отделить TestSuite от TestCase, если хотите. Тем не менее, TestCase не работает в одиночку, поэтому вам нужно быть осторожным с соглашениями об именах, если ваши тесты обнаруживаются автоматически.