【问题标题】:JUnit Test for Apache Camel Route with Mockito Mock does not fail使用 Mockito Mock 对 Apache Camel Route 进行 JUnit 测试不会失败
【发布时间】:2019-03-01 22:42:41
【问题描述】:

我编写了一个 Camel-Route,它使用带有 Processor 的 DLC 模式,该模式在 Exchange 发送到 DLC 之前执行。

errorHandler(deadLetterChannel("{{myDLCEndpoint}}")
                .onPrepareFailure(getErrorProcessor()));

在我的路线中,我抛出了一个 RuntimeException,然后由 errorProcessor 和 DLC 处理。当我启动应用程序并让路由运行时,一切都按预期工作。

现在我想编写一个单元测试,只是确保它有效。

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
public class MyRouteTest {
@MockBean
    private ErrorProcessor errorProcessor;

    @EndpointInject(uri = "{{quelle}}")
    private ProducerTemplate quelle;

    @EndpointInject(uri = "{{myDLCEndpoint}}")
    private ProducerTemplate dlc;

    @Test
    @Transactional("myDataSourceTransactionManager") //For Rollback
    public void test() throws Exception {
        Mockito.verify(errorProcessor, never()).process(Mockito.any());

        String inputXML = TestDataReader.readXML("myfile.xml");
        assertNotNull(inputXML);

        quelle.sendBody(inputXML);
    }
}

我开始测试并检查了日志,不幸的是,在执行路由期间发生了异常。异常由骆驼处理,并且肯定会调用模拟的错误处理器,因为我对其进行了调试:

不幸的是,即使使用Mockito.verify(errorProcessor, never()).process(Mockito.any());,单元测试仍然成功

现在我不知道为什么它没有失败,这将是我在这种情况下所期望的结果?

【问题讨论】:

    标签: java unit-testing spring-boot apache-camel mockito


    【解决方案1】:

    我是个白痴。 Mockito.verify 的调用在调用 quelle.sendBody 之前。 哇哦。抱歉各位,我只是没看到:-D

    让 Mockito 工作的正确方法是:

            String inputXML = TestDataReader.readXML("myfile.xml");
            assertNotNull(inputXML);
    
            quelle.sendBody(inputXML);
            //call mockito AFTER the test is executed! 
            Mockito.verify(errorProcessor, never()).process(Mockito.any());
    

    【讨论】:

    • 这对我很有用,因为我在尝试使用 mock 时应该使用 @MockBean 注释处理器,但它从未工作过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2012-03-14
    • 2020-01-17
    • 1970-01-01
    相关资源
    最近更新 更多