gpt4 book ai didi

java - 使用 Mockito Mock 对 Apache Camel Route 进行 JUnit 测试不会失败

转载 作者:行者123 更新时间:2023-12-02 10:12:02 37 4
gpt4 key购买 nike

我编写了一个 Camel-Route,它使用 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);
}
}

我开始测试并检查日志,不幸的是在路由执行过程中发生了异常。异常由 Camel 处理,并且肯定会调用模拟的错误处理器,因为我调试了它:

debugger: the mocked bean is called for sure!

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

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

最佳答案

我是个白痴。 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());

关于java - 使用 Mockito Mock 对 Apache Camel Route 进行 JUnit 测试不会失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54946815/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com