我發現JUnit的正確使用(或至少文檔)非常混亂。 這個問題既可以作爲未來的參考,也可以作爲一個真正的問題。JUnit混淆:使用'擴展TestCase'或'@Test'?
如果我理解正確的話,有創建和運行JUnit測試方法主要有兩種:
方法A(JUnit的3式):創建一個擴展的TestCase類,並開始測試方法用詞test
。將該類作爲JUnit Test(在Eclipse中)運行時,將自動運行以test
這個詞開頭的所有方法。
import junit.framework.TestCase;
public class DummyTestA extends TestCase {
public void testSum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
方法B(JUnit 4中樣式):創建一個 '正常' 的類和在前面加上一個@Test
註釋的方法。請注意,您不必使用單詞test
開始該方法。
import org.junit.*;
import static org.junit.Assert.*;
public class DummyTestB {
@Test
public void Sum() {
int a = 5;
int b = 10;
int result = a + b;
assertEquals(15, result);
}
}
將兩者混合似乎並不是一個好主意, this stackoverflow question:
現在,我的問題(S):
- 什麼是首選的方法,或當您將使用一個,而不是其他?
- 方法B允許通過擴展@Test註釋來測試異常,如
@Test(expected = ArithmeticException.class)
。 但是,如何使用方法A測試異常? 當使用方法A,就可以組中的測試套件這樣一些測試類:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
但這不能與方法B中使用(因爲每個測試類都應該子類TestCase)。 對方法B進行分組測試的正確方法是什麼?
編輯:我已經添加了JUnit版本,這兩種方法
有幫助和全面的答案,但我不完全理解「檢查異常消息」。檢查硬編碼的字符串將成爲維護的噩夢。您必須具有「檢查特定異常類型的屬性」的含義。 – thSoft 2010-04-14 09:17:29
@thSoft:它並不經常被使用,但偶爾我想確保例外方法提到違規字段。然後,一個簡單的'assertTrue(e.getMessage()。contains(「foo」))'可能會有用。 – 2010-04-14 09:22:06
即使在JUnit4中,當你必須檢查消息或異常的其他屬性(如原因)時,這也是一個重要的習慣用法。預期的方法只檢查類型。 – Yishai 2010-04-14 13:35:22