我发现JUnit的正确使用(或至少是文档)非常令人困惑。这个问题既可以作为将来的参考,也可以作为真实的问题。
如果我理解正确,那么可以使用两种主要方法来创建和运行JUnit测试:
方法A(JUnit 3样式):创建一个扩展TestCase的类,并使用单词启动测试方法test
。当将类作为JUnit测试运行(在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);
}
}
混合两者似乎不是一个好主意,请参见例如这个stackoverflow问题:
现在,我的问题是:
- 首选的方法是什么,或者何时使用一种方法代替另一种方法?
- 方法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版本添加到两种方法
extends TestCase
,然后每个测试也都带有注解,@Test
以使事情变得混乱。:)