测试用例

测试用例

JUnit4 和 JUnit5 在测试编码风格上没有太大变化,这是其生命周期方法的样本测试。

public class AppTest {

  @BeforeAll
  static void setup() {
    System.out.println("@BeforeAll executed");
  }

  @BeforeEach
  void setupThis() {
    System.out.println("@BeforeEach executed");
  }

  @Tag("DEV")
  @Test
  void testCalcOne() {
    System.out.println("======TEST ONE EXECUTED=======");
    Assertions.assertEquals(4, Calculator.add(2, 2));
  }

  @Tag("PROD")
  @Disabled
  @Test
  void testCalcTwo() {
    System.out.println("======TEST TWO EXECUTED=======");
    Assertions.assertEquals(6, Calculator.add(2, 4));
  }

  @AfterEach
  void tearThis() {
    System.out.println("@AfterEach executed");
  }

  @AfterAll
  static void tear() {
    System.out.println("@AfterAll executed");
  }
}

测试套件

使用 JUnit5 的测试套件,可以将测试扩展到多个测试类和不同的软件包。JUnit5 提供了两个注解:@SelectPackages 和 @SelectClasses 来创建测试套件。要执行测试套件,可以是使用 @RunWith(JUnitPlatform.class)

@RunWith(JUnitPlatform.class)
@SelectPackages("test.junit5.examples")
public class JUnit5TestSuiteExample {}

另外,你也可以使用以下注解来过滤测试包、类甚至测试方法。

  • @IncludePackages 和 @ExcludePackages 来过滤包
  • @IncludeClassNamePatterns 和 @ExcludeClassNamePatterns 过滤测试类
  • @IncludeTags 和 @ExcludeTags 过滤测试方法
@RunWith(JUnitPlatform.class)
@SelectPackages("test.junit5.examples")
@IncludePackages("test.junit5.examples.packageC")
@ExcludeTags("PROD")
public class JUnit5TestSuiteExample {
  // ...
}

断言

断言有助于使用测试用例的实际输出验证预期输出。为了保持简单,所有 JUnit Jupiter 断言是 org.junit.jupiter.Assertions 类中的静态方法,例如 assertEquals(),assertNotEquals()。

void testCase()
{
    //Test will pass
    Assertions.assertNotEquals(3, Calculator.add(2, 2));
    //Test will fail
    Assertions.assertNotEquals(4, Calculator.add(2, 2), "Calculator.add(2, 2) test failed");
    //Test will fail
    Supplier<String> messageSupplier  = ()-> "Calculator.add(2, 2) test failed";
    Assertions.assertNotEquals(4, Calculator.add(2, 2), messageSupplier);
}

假设

Assumptions 类提供了静态方法来支持基于假设的条件测试执行。失败的假设导致测试被中止。无论何时继续执行给定的测试方法没有意义,通常使用假设。在测试报告中,这些测试将被标记为已通过。JUnit 的 Jupiter 假设类有两个这样的方法:assumeFalse(),assumeTrue()。

public class AppTest {

  @Test
  void testOnDev() {
    System.setProperty("ENV", "DEV");
    Assumptions.assumeTrue(
      "DEV".equals(System.getProperty("ENV")),
      AppTest::message
    );
  }

  @Test
  void testOnProd() {
    System.setProperty("ENV", "PROD");
    Assumptions.assumeFalse("DEV".equals(System.getProperty("ENV")));
  }

  private static String message() {
    return "TEST Execution Failed::";
  }
}
下一页