我发现 JUnit 的正确使用(或至少是文档)非常令人困惑。这个问题既可以作为未来的参考,也可以作为一个真实的问题。
如果我理解正确的话,创建和运行 JUnit 测试有两种主要方法:
方法 A(JUnit 3 风格): 创建一个扩展 TestCase 的类,并以单词test. 当将该类作为 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。
@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 问题:
现在,我的问题:
@Test(expected = ArithmeticException.class)
TestSuite suite = new TestSuite("All tests"); suite.addTestSuite(DummyTestA.class); suite.addTestSuite(DummyTestAbis.class);
TestSuite suite = new TestSuite("All tests");
suite.addTestSuite(DummyTestA.class);
suite.addTestSuite(DummyTestAbis.class);
但这不能与方法 B 一起使用(因为每个测试类都应该是 TestCase 的子类)。 对方法 B 进行分组测试的正确方法是什么?
编辑:我已将 JUnit 版本添加到这两种方法中
区别很简单:
TestCase
通常您应该选择注释路径,除非需要与 JUnit 3(和/或早于 Java 5 的 Java 版本)兼容。新方式有几个优点:
@Before
@BeforeClass
@After
@AfterClass
@Rule
ExpectedException
@Ignored
@RunWith
要测试 JUnit 3 中的预期异常,TestCase您必须明确文本。
public void testMyException() { try { objectUnderTest.myMethod(EVIL_ARGUMENT); fail("myMethod did not throw an Exception!"); } catch (MyException e) { // ok! // check for properties of exception here, if desired } }
JUnit 5引入了另一个 API 更改,但仍然使用注释。新的@Test注释是org.junit.jupiter.api.Test(“旧的”JUnit 4 是org.junit.Test),但它的工作方式与 JUnit 4 几乎相同。
org.junit.jupiter.api.Test
org.junit.Test