我有camel + springboot应用程序。还有一些单元测试:一个测试用于一个处理器。他们扩展了CamelTestSupport。他们在工作。 例如:
public class FaultProcessorTest extends CamelTestSupport {
private static final Logger LOGGER = LoggerFactory.getLogger(FaultProcessorTest.class);
@EndpointInject(uri = "mock:result")
protected MockEndpoint mockResult;
@Test
public void testProcess() throws InterruptedException {
LOGGER.info("FaultProcessorTest.testProcess()");
String body = "AnyNoMatterBody";
MockEndpoint mockResult = template.getCamelContext().getEndpoint("mock:result", MockEndpoint.class);
template.setDefaultEndpointUri("direct:in");
Exchange exchange = template.getDefaultEndpoint().createExchange();
exchange.setProperty("requestId", "req00001");
exchange.setProperty("targetSYS1Id", "tSYS100001");
exchange.setProperty("FaultDetails", " FaultProcessorTest fault Details");
exchange.setProperty("FaultActor", "TestFault");
mockResult.setExpectedMessageCount(2);
mockResult.whenAnyExchangeReceived(exc -> {
MyProcResp res = MyProcResp.class
.cast(exc.getIn().getBody(MyProcResp.class));
assertTrue("assertion failed: res.getFaults().size() > 0", res.getFaults().size() > 0);
assertTrue("assertion failed: res.getStatus().equals(Status.FAILED.name())",
res.getStatus().equals(Status.FAILED.name()));
assertTrue("assertion failed: res.getRequestId()!=null && res.getRequestId().equals(\"req00001\")",
res.getRequestId() != null && res.getRequestId().equals("req00001"));
assertTrue("assertion failed: res.getTargetSYS1Id()!=null && res.getTargetSYS1Id().equals(\"tSYS100001\")",
res.getTargetSYS1Id() != null && res.getTargetSYS1Id().equals("tSYS100001"));
});
template.send(exchange);
exchange.getIn().setBody(body);
template.send(exchange);
mockResult.assertIsSatisfied();
}
@Override
// create route with their end-points in context
protected RoutesBuilder createRouteBuilder() throws Exception {
RouteBuilder response = new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:in").process(new FaultProcessor()).to("mock:result");
}
};
return response;
}
}
但后来我想测试Route“As Is”。模拟他们的端点,向一个人发送消息,从另一个人那里获取消息。它的效果非常好。 我的路线:
@Component
public class MyRoute extends RouteBuilder {
@Autowired
private FaultProcessor faultProcessor;
@Value("${myprop.property1}")
private long property1;
@Override
public void configure() throws Exception {
... Any nomatter content...
from("direct:testReq").to("direct:testRes");
}
}
我的路线测试:
@RunWith(CamelSpringBootRunner.class)
@MockEndpoints
@SpringBootApplication
@ContextConfiguration(classes = Application.class)
@TestPropertySource("classpath:application4test.properties")
@DirtiesContext(classMode=ClassMode.AFTER_CLASS)
public class MyRouteTest {
@Produce(uri = "direct:testReq")
private ProducerTemplate producer;
@EndpointInject(uri = "mock://direct:testRes")
private MockEndpoint mock;
@Test
public void testRoute() throws Exception {
mock.setExpectedMessageCount(1);
mock.whenAnyExchangeReceived(exc -> System.out.println("---check point---"));
producer.setDefaultEndpointUri("direct:testReq");
producer.sendBody("nomatter body");
mock.assertIsSatisfied();
}
}
问题是:如果我一起运行所有测试(“mvn test”),那么所有“简单”的junit测试都处于状态 - 失败状态。我认为,端点不会被嘲笑。
如果我在没有“MyRouteTest”的情况下运行它们(删除它或逐个启动其他测试,比如“mvn -Dtest = FaultProcessorTest test”)它们都是 - “成功”。
有什么问题?为什么“单位”测试取决于另一个?