爲了清楚起見,我已經從所有不必要的複雜性中解決了該問題,並附加了兩個文件。實際上,我想從數據庫加載所需的測試輸入。在這個例子中我有套房映射在Suites
類,而不是從查詢結果。在TestOverride
的運行方法中,我也有一個相當複雜的比較,而不是簡單的比較。基本上這就是我如何以動態的方式用數據庫中的測試(套件地圖)來創建測試套件。另外,當我使用eclipse運行它時,我可以看到測試名稱,這一點很重要。無法使用JUnit和Eclipse運行單元測試以進行數據驅動測試
如果運行Suites
(它和Eclipse的JUnit的運行只需右擊),它工作正常。唯一通過的測試是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;
}
}
非常感謝您的回答。我擔心是這樣。 – edd 2011-03-29 07:39:37