我有一个测试类,它有一个带有CsvSource的参数化测试,还有其他使用CapturedOutput的测试。它们单独运行良好,但在一起运行时随机失败,没有任何接触异常。以下是示例代码:
@ExtendWith({MockitoExtension.class, OutputCaptureExtension.class})
class SampleTest {
// Few Mocks and InjectMock
@ParameterizedTest
@CsvSource({"foo,hi-foo", "bar,hi-bar"})
void someTest(String input, String output) {
assertEquals(output, "hi-" + input);
}
@Test
void anotherTest(CapturedOutput capturedOutput) {
assertFalse(capturedOutput.getAll().contains("Checking some logs"));
}
@Test
void lastTest(CapturedOutput capturedOutput) {
assertFalse(capturedOutput.getAll().contains("Again checking some logs"));
}
}
对如何解决这个问题有什么想法吗?
PS:我无法创建另一个测试文件。
解决方案是在JUnit5中使用嵌套的
类。我从根类中删除了OutputCapture Express
,并将其添加到嵌套的
类之上,它工作正常。
@ExtendWith(MockitoExtension.class)
class SampleTest {
// Few Mocks and InjectMock
@ParameterizedTest
@CsvSource({"foo,hi-foo", "bar,hi-bar"})
void someTest(String input, String output) {
assertEquals(output, "hi-" + input);
}
@Nested
@ExtendWith(OutputCaptureExtension.class)
class NestedTest {
@Test
void anotherTest(CapturedOutput capturedOutput) {
assertFalse(capturedOutput.getAll().contains("Checking some logs"));
}
@Test
void lastTest(CapturedOutput capturedOutput) {
assertFalse(capturedOutput.getAll().contains("Again checking some logs"));
}
}
}