构造函数和方法的依赖注入
在之前的所有JUnit版本中,测试构造函数或方法都不允许有参数(至少不能使用标准的Runner实现)。作为JUnit Jupiter的主要变化之一,测试构造函数和方法现在都允许有参数。这带来了更大的灵活性,并为构造函数和方法启用依赖注入。
ParameterResolver
定义了测试扩展的API,希望在运行时动态解析参数。如果测试构造函数或@Test
, @TestFactory
, @BeforeEach
, @AfterEach
, @BeforeAll
或@AfterAll
方法接受参数,则该参数必须在运行时由已注册的ParameterResolver
解析。
目前有三个自动注册的内置解析器。
RepetitionInfoParameterResolver
如果
@RepeatedTest
,@BeforeEach
或@AfterEach
方法中的方法参数类型为RepetitionInfo,则RepetitionInfoParameterResolver
将提供RepetitionInfo
的实例。然后可以使用RepetitionInfo
获取当前重复信息以及相应的@RepeatedTest
的重复总数。但是请注意,RepetitionInfoParameterResolver
不在@RepeatedTest
的上下文之外注册。请参阅重复测试示例。如果方法参数的类型是TestReporter,
TestReporterParameterResolver
将提供一个TestReporter
的实例。TestReporter
可用于发布有关当前测试运行的额外数据。数据可以通过TestExecutionListener.reportingEntryPublished()
来使用,因此可以被IDE查看或包含在报告中。在JUnit Jupiter中,当你需要打印信息时,就像在JUnit4使用
stdout
或stderr
,你应该使用TestReporter
。使用@RunWith(JUnitPlatform.class)
甚至会将所有报告的条目输出到stdout
。
其他参数解析器必须通过
@ExtendWith
注册适当的扩展来显式启用。
查看MockitoExtension获取自定义ParameterResolver
的示例。虽然不打算生产就绪,它展示了扩展模型和参数解析过程的简单性和表达性。MyMockitoTest
演示了如何将Mockito mock注入@BeforeEach
和@Test
方法。
Last updated