[英]Cannot run single unit test with JUnit and Eclipse for data-driven testing
為了清楚起見,我從所有不必要的復雜性中刪除了該問題,並附加了兩個文件。 實際上,我想從數據庫加載測試所需的輸入。 在示例中,我在Suites
類中具有套件映射,而不是查詢結果。 我還有一個相當復雜的比較,而不是TestOverride
的run方法中的簡單比較。 基本上,這就是我解決了以動態方式從數據庫(套件映射)中使用其測試創建測試套件的方法。 另外,在使用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;
}
}
如果重寫runTest()
並從TestCase
類創建TestSuite
,則要容易得多。
這是一個有效的示例: http : //mrlalonde.blogspot.ca/2012/08/data-driven-tests-with-junit.html
我認為無法實現您想要的。 據我所知(和經驗),只能從junit窗口中執行“真正的” junit方法(即現有類中的實際方法)(使用參數化測試時很容易重現。特定的Tests無法運行還是在這里)。
也許您應該嘗試為測試生成Java代碼(並進行編譯)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.