测试用例
测试用例
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::";
}
}