提问者:小点点

OutputCapture Express和ParameterizedTest不一起工作


我有一个测试类,它有一个带有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:我无法创建另一个测试文件。


共1个答案

匿名用户

解决方案是在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"));
        }
    }
}