JUnit批注
JUnit测试框架基于注释构建。
JUnit 5是对JUnit 4的主要升级。
有不同的模块,我们需要JUnit Platform和JUnit Jupiter API才能为我们的java项目创建和运行测试用例。
JUnit批注
让我们看一下JUnit 5 Jupiter API中最重要的注释。
它们中的大多数位于" junit-jupiter-api"模块中的" org.junit.jupiter.api"包中。
@测试
@Test注释用于指定带注释的方法是测试方法。
@Test方法不得为私有或者静态。
@Test方法不能返回值。
@Test方法可以选择声明要由ParameterResolvers解析的参数。
这是@Test方法的简单示例。
@Test void testMethod1() { System.out.println("test method"); }
@ParameterizedTest
JUnit @ParameterizedTest批注用于使用不同的参数多次运行测试方法。
该注释在" junit-jupiter-params"模块中定义。
此批注还要求我们为方法参数定义源。
可以用作参数提供程序的一些注释包括:ValueSource,EnumSource,MethodSource,CsvSource和CsvFileSource。
这是使用@ParameterizedTest批注的简单示例。
@ParameterizedTest @ValueSource(strings = { "1", "2", "3" }) void test_ValueSource_String(String s) { assertTrue(Integer.parseInt(s) < 5); }
您可以在JUnit Parameterized Tests中阅读有关它们的更多信息。
@RepeatedTest
JUnit @RepeatedTest批注用于重复指定次数的测试。
@RepeatedTest(5) void test() { System.out.println("@RepeatedTest Simple Example"); }
上面的测试将执行5次,更多信息请参见JUnit重复测试。
@TestFactory
可以将JUnit @TestFactory批注与DynamicTest结合使用,以创建测试工厂方法。
JUnit @TestFactory方法不得为私有或者静态。
这些方法必须返回DynamicNode实例的Stream,Collection,Iterable或者Iterator。
这是@TestFactory方法的简单示例,可在运行时创建动态测试。
@TestFactory Collection<DynamicTest> dynamicTests() { return Arrays.asList( dynamicTest("simple dynamic test", () -> assertTrue(true)), dynamicTest("My Executable Class", new MyExecutable()), dynamicTest("simple dynamic test-2", () -> assertTrue(true)) ); }
我们也可以为类方法生成动态测试,有关更多信息,请参见JUnit 5动态测试。
@TestInstance
我们可以使用@TestInstance批注来更改类的生命周期行为。
默认情况下,JUnit在执行每个测试方法之前为每个测试类创建一个新实例。
此行为称为"按方法"测试实例生命周期。
我们可以将其更改为"每类"模式,以便更快地处理测试,因为每个测试类将创建一个新的测试实例。
@TestInstance(Lifecycle.PER_CLASS) class InnerClass { //tests }
@显示名称
此批注用于为测试类和方法定义自定义显示名称。
@DisplayName("MyTestClass") public class DisplayNameTest { } @Test @DisplayName("Example Test Method with No Business Logic") void test() { assertTrue(3 > 0); }
您可以在" JUnit显示名称"中了解有关它的更多信息。
@嵌套
JUnit Jupiter @Nested批注用于标记要包含在测试用例中的嵌套类。
默认情况下,不扫描嵌套类的测试方法。
嵌套类应该是非静态的。
您可以在JUnit嵌套测试中阅读有关它们的更多信息。
@已停用
JUnit @Disabled注释是禁用测试的最简单方法。
它既可以应用于测试方法,也可以应用于类本身。
@Test @Disabled void test() { assertTrue(true); } @Disabled("Explicitly Disabled") class DisabledTests { //all tests disabled }
JUnit Jupiter提供了各种批注以根据指定条件启用或者禁用测试。
其中一些是@ DisabledOnOs,@ EnabledOnOs,@ DisabledOnJre,@ EnabledOnJre,@ DisabledIfEnvironmentVariable,@ EnabledIfEnvironmentVariable,@ DisabledIfSystemProperty,@ EnabledIfSystemProperty,@ DisabledIf @EnabledIf
您可以在JUnit禁用启用测试中获得有关这些注释的完整详细信息。
JUnit生命周期回调注释
在测试用例执行的各个阶段,可以使用四个注释来定义回调方法。
@BeforeEach
表示带注释的方法应该在当前类中的每个@ Test,@ RepeatedTest,@ ParameterizedTest或者@TestFactory方法之前执行。
@AfterEach
用于定义方法在当前类中每个测试方法之后执行。
这些方法也将为嵌套类中的每个测试执行。
@BeforeAll
用于定义要在当前类中的所有测试方法之前执行的方法。
除非将TestInstance设置为"每类"模式,否则此方法必须是静态的。
@毕竟
此注释用于定义要在当前类中的所有测试方法之后执行的方法。
除非将TestInstance设置为"每类"模式,否则此方法必须是静态的。
@BeforeAll static void setUpBeforeClass() throws Exception { System.out.println("Set Up Before Class - @BeforeAll"); } @AfterAll static void tearDownAfterClass() throws Exception { System.out.println("Tear Down After Class - @AfterAll"); } @BeforeEach void setUp() throws Exception { System.out.println("Set Up @BeforeEach"); } @AfterEach void tearDown() throws Exception { System.out.println("Tear Down @AfterEach"); }
JUnit生命周期回调方法可用于初始化或者破坏测试资源。
它们也可以用于在执行测试用例之前重置任何共享变量。