Я снял проблему со всей ненужной сложности и приложил два файла для ясности.На самом деле, я хочу загрузить необходимые данные для тестирования из базы данных.В примере у меня есть карта наборов в классе Suites
вместо результата запроса.У меня также есть довольно сложное сравнение вместо простого в методе run TestOverride
.По сути, именно так я решил динамически создавать наборы тестов с их тестами из базы данных (карта наборов).Кроме того, важно, чтобы я мог видеть имя теста, когда я запускаю его с eclipse.
Если вы запускаете Suites
(просто щелкните по нему правой кнопкой мыши и JUnit-запустите на eclipse), он работает нормально.Единственный тест, который проходит, это test4.Тем не менее, я хотел бы иметь возможность запустить один тест с этим типом конструкции (один набор также был бы хорош, но я был бы счастлив с одним тестом).Другими словами, после запуска всех пакетов я хотел бы перейти в окно JUnit, щелкнуть правой кнопкой мыши по одному тесту и запустить его.Если я это сделаю, это не сработает.Я почему-то думал, что тесты были сохранены где-то после первого запуска, и что я мог бы использовать их позже.
Я использую eclipse 3.6 и JUnit 4.0
Есть идеи?Я не использую аннотации для параметризованных классов, потому что все должно быть известно до времени компиляции (и я беру информацию из базы данных).Я также видел на форумах, что при таком подходе довольно сложно переименовать контрольные примеры.
import java.util.HashMap;
import java.util.Map;
import junit.framework.Test;
import junit.framework.TestSuite;
public class Suites {
public static Test suite() {
Map<String, String[]> suites = new HashMap<String, String[]>();
suites.put("suite1", new String[]{"test1", "test2"});
suites.put("suite2", new String[]{"test3", "test4"});
TestSuite all = new TestSuite("All Suites");
for(Map.Entry<String, String[]> entry : suites.entrySet()) {
TestSuite suite = new TestSuite(entry.getKey());
for(String testName : entry.getValue()) {
suite.addTest(
new TestOverride(
testName
)
);
}
all.addTest(suite);
}
return all;
}
}
import junit.framework.AssertionFailedError;
import junit.framework.TestCase;
import junit.framework.TestResult;
public class TestOverride extends TestCase {
private String name;
public TestOverride(
String name)
{
this.name = name;
}
@Override
public void run(TestResult result) {
result.startTest(this);
if (this.name.equals("test4")) {
result.endTest(this);
} else {
result.addFailure(this, new AssertionFailedError("Not test4"));
}
}
@Override
public String getName() {
return name;
}
}