JUnit混淆:使用“扩展测试用例”或“@Test”?
我发现JUnit的正确使用(或至少是文档)非常令人困惑。这个问题既是未来的参考,也是一个真正的问题。
如果我理解正确,有两种主要方法可以创建和运行JUnit测试:
方法 A(JUnit 3 样式):创建一个扩展 TestCase 的类,并以单词 开始测试方法。当该类作为 JUnit 测试运行时(在 Eclipse 中),所有以单词开头的方法都将自动运行。test
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);
}
}
将两者混合在一起似乎不是一个好主意,例如,请参阅此堆栈溢出问题:
现在,我的问题:
- 首选方法是什么,或者您何时使用一种方法而不是另一种方法?
- 方法 B 允许通过扩展@Test注释来测试异常,如 中所示。但是,在使用方法 A 时,如何测试异常呢?
@Test(expected = ArithmeticException.class)
-
使用方法 A 时,可以在测试套件中对多个测试类进行分组,如下所示:
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
但这不能与方法B一起使用(因为每个测试类都应该子类TestCase)。对方法 B 的测试进行分组的正确方法是什么?
编辑:我已经将JUnit版本添加到这两种方法中