我编写了一个骆驼路线,该路线使用带有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());
现在我不知道为什么它不会失败,这是我在这种情况下期望的结果吗?
答案 0 :(得分:1)
我是个白痴。 Mockito.verify
的呼叫在呼叫quelle.sendBody
之前。
WAAAH。抱歉,我没看到:-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());