我发现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