Logo
Section 1 / 6

参数解析器:TestInfo

了解如何在构造函数和测试方法中使用依赖注入(TestInfo 参数)。

导入

参数解析器:TestInfo

了解如何在构造函数和测试方法中使用依赖注入(TestInfo 参数)。

什么是依赖注入?

在测试方法中使用外部依赖是很常见的。在 JUnit 5 中,测试构造函数和方法可以接受参数来注入依赖。然而,并非所有类型的参数都允许出现在构造函数或方法中。需要通过定义扩展来解析这些参数。扩展模型支持注册自定义的参数解析器。在本节中,我们仅介绍内置的参数解析器。org.junit.jupiter.api.extension.ParameterResolver 是参数解析器的接口。

JUnit 5 提供了三种内置的参数解析器:

  • TestInfoParameterResolver
  • TestReporterParameterResolver
  • RepetitionInfoParameterResolver
...
参数解析器

TestInfo 参数

org.junit.jupiter.engine.extension.TestInfoParameterResolver 解析器用于处理类型为 org.junit.jupiter.api.TestInfo 的参数。TestInfo 参数提供了获取当前测试类或方法信息的方法。类型为 TestInfo 的参数可以出现在带有 @Test、@BeforeEach、@AfterEach、@BeforeAll 和 @AfterAll 注解的测试构造函数和方法中。

TestInfo 的方法

方法名描述
String getDisplayName()获取显示名称。如果未使用 @DisplayName,则显示名称是基于测试类生成的名称。
Set<String> getTags()获取所有标签的集合。
Optional<Class<?>> getTestClass()获取测试类。
Optional<Method> getTestMethod()获取测试方法。

下面的代码展示了如何使用 TestInfo 来获取当前测试执行的信息。在 TestInfoTest 的构造函数中,我们验证 testInfo.getDisplayName() 的值是否与 @DisplayName 中提供的值一致。在测试方法 testTags 中,我们验证 getTags、getTestClass 和 getTestMethod 方法的返回值。

1import org.junit.jupiter.api.Tag; 2import org.junit.jupiter.api.TestInfo; 3 4@DisplayName("TestInfo") 5public class TestInfoTest { 6 public TestInfoTest(final TestInfo testInfo) { 7 assertEquals("TestInfo", testInfo.getDisplayName()); 8 } 9 @Test 10 @Tag("demo") 11 @DisplayName("tags") 12 void testTags(final TestInfo testInfo) { 13 assertEquals("tags", testInfo.getDisplayName()); 14 assertTrue(testInfo.getTags().contains("demo")); 15 assertEquals(TestInfoTest.class, testInfo.getTestClass().get()); 16 assertTrue(testInfo.getTestMethod().isPresent()); 17 assertEquals("testTags", testInfo.getTestMethod().get().getName()); 18 } 19}

JUnit 5 中的嵌套测试

参数解析器:测试报告器