当前位置: 首页 > 知识库问答 >
问题:

OutputCapture Express和ParameterizedTest不一起工作

房新翰
2023-03-14

我有一个测试类,它有一个带有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个答案

关翰
2023-03-14

解决方案是在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"));
        }
    }
}
 类似资料:
  • {“时间戳”:1553613278534,“状态”:400,“错误”:“错误请求”,“消息”:“必需的字符串参数'param2'不存在”,“路径”:“/MyURL/42”} 我希望PUT的工作就像POST一样,但它似乎不是。 不幸的是,我不能将参数作为QueryParam发送,因此我应该维护相同的请求调用,因为我正在重构一个完全以这种方式工作的现有endpoint。

  • 当异常发生在CompletableFuture中时,我试图设置一个默认值,我通过如下方法使其工作: 但是,当我试图在不好的事情发生时异常地使用complete来停止CompletableFuture,并按如下方式跟踪异常时,我无法像刚才那样捕捉到异常。 更新日期2018-06-09谢谢您的帮助,@Daniele 在join()之前封闭的句柄按预期工作。但在这种情况下,

  • 我正在试验把杰克逊和龙目岛结合起来。这些是我的课: 这些是我添加到类spth中的JAR: > 龙目岛:https://projectlombok.org/downloads/lombok.jar(1.16.10version) 此外,Netbeans项目被配置为“保存时不编译”、“生成调试信息”、“报告不推荐使用的API”、“跟踪java依赖项”、“Activacte注释处理”和“编辑器中的Act

  • 服务被调用,但我的问题是这行代码 不起作用,我的意思是它真的调用了adminDao。选择方法,从而从数据库中获取结果。这是我不想要的。你知道如何模拟方法调用吗?

  • 更改单元格值后,我的不会刷新。我可以双击一个单元格并更改它的值,但是当我按OK或者我点击离开单元格时,值会重置为上一个,这不是更新表。这是我的自定义表模型的代码,我不知道如何更新数据库,因为当我改变单元格的值时,表是从一个db中取出来的。 如果您需要其他东西,例如数据库或表编辑器的代码,请告诉我;)谢谢您的帮助:) --编辑--好的,我已经实现了setValueAt方法,但是当我单击单元格时,它给

  • 更新后反序列化失败。 我将我的微服务从更新到,并将从更新为,从更新为。 JSON字符串- 班级 - 方法调用- 用于反序列化的方法 - 错误 -