JUnit批注

时间:2020-02-23 14:35:23  来源:igfitidea点击:

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生命周期回调方法可用于初始化或者破坏测试资源。
它们也可以用于在执行测试用例之前重置任何共享变量。