JUnit混淆:使用“ExtendedTestCase”或“@Test”?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (14)

如果我理解正确,有两种主要方法可以创建和运行JUnit测试:

创建扩展TestCase的类,并使用Word启动测试方法test。当将类作为JUnit测试(在Eclipse中)运行时,所有方法都以Word开头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);
    }
}

创建一个“正常”类,并在@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);
    }
}

现在,我的问题:

  1. 什么是首选的方法?或者你什么时候用一种代替另一种?
  2. 方法B允许通过扩展@Test注释来测试异常,如@Test(expected = ArithmeticException.class)但是,在使用方法A时,如何测试异常呢?
  3. 在使用方法A时,可以在测试套件中对多个测试类进行分组,如下所示:TestSuite suite = new TestSuite("All tests");suite.addTestSuite(DummyTestA.class);suite.addTestSuite(DummyTestAbis.class);

但是这不能与方法B一起使用(因为每个testclass都应该是TestCase子类)。什么是分组测试的正确方法?

提问于
用户回答回答于

区别相当容易:

  • 延伸TestCase是在JUnit 3中编写单元测试的方式(当然,JUnit 4仍然支持它)
  • 使用@Test注释是JUnit 4引入的方式

通常,应该选择注释路径,除非需要与JUnit 3(和/或Java 5之前的Java版本)兼容。这种新方法有几个优点:

@Test注解更明确,更易于在工具中支持

多个方法可以用@Before/@BeforeClass和@After/@AfterClass提供更大的灵活性

支持@Rule注解在类似的事情上ExpectedException

支持@Ignored注记

对替代测试运行程序的支持@RunWith

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 4中构建测试套件,则必须创建一个类分组所有测试,如下所示:

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;


@RunWith(Suite.class)
@SuiteClasses({
    Test1.class,
    Test2.class,
    Test3.class,
    Test4.class
})public class TestSuite
{
 /* empty class */
}

扫码关注云+社区