我看過所有類似的問題,但在我看來,他們都沒有給出一個堅實的答案。我有一個測試類(JUnit 4,但也對JUnit 3感興趣),我想以編程方式/動態方式(而不是從命令行)從這些類中運行單個測試方法。說,有5個測試方法,但我只想運行2.我怎樣才能以編程方式/動態(而不是從命令行,Eclipse等)實現這一點。如何在JUnit 4測試類中運行單個方法?
此外,在測試類中有一個@Before
帶註釋的方法。所以,當運行單獨的測試方法時,@Before
也應該預先運行。這怎麼能克服?
在此先感謝。
我看過所有類似的問題,但在我看來,他們都沒有給出一個堅實的答案。我有一個測試類(JUnit 4,但也對JUnit 3感興趣),我想以編程方式/動態方式(而不是從命令行)從這些類中運行單個測試方法。說,有5個測試方法,但我只想運行2.我怎樣才能以編程方式/動態(而不是從命令行,Eclipse等)實現這一點。如何在JUnit 4測試類中運行單個方法?
此外,在測試類中有一個@Before
帶註釋的方法。所以,當運行單獨的測試方法時,@Before
也應該預先運行。這怎麼能克服?
在此先感謝。
這是一個簡單的一個方法亞軍。它基於JUnit 4框架,但可運行任何方法,不一定用@Test註釋
private Result runTest(final Class<?> testClazz, final String methodName)
throws InitializationError {
BlockJUnit4ClassRunner runner = new BlockJUnit4ClassRunner(testClazz) {
@Override
protected List<FrameworkMethod> computeTestMethods() {
try {
Method method = testClazz.getMethod(methodName);
return Arrays.asList(new FrameworkMethod(method));
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
Result res = new Result();
runner.run(res);
return res;
}
class Result extends RunNotifier {
Failure failure;
@Override
public void fireTestFailure(Failure failure) {
this.failure = failure;
};
boolean isOK() {
return failure == null;
}
public Failure getFailure() {
return failure;
}
}
我認爲這隻能用自定義TestRunner來完成。啓動測試時,您可以傳遞您希望作爲參數運行的測試的名稱。更有趣的解決方案是實現自定義註釋(可以說@TestGroup),它將組名稱作爲參數。你可以用它來註釋你的測試方法,給你想要一起運行相同組名的測試。同樣,在啓動測試時將組名稱作爲參數。在您的測試運行程序中,只收集具有相應組名稱的那些方法並啓動這些測試。
然而,這個最簡單的辦法是將要單獨運行到另一個文件中的那些測試...