我想使用ScalaTest和FunSpec测试风格对Camel代码进行单元测试。
要做到这一点,我需要从FunSpec和CamelTestSupport进行扩展。然而,这两个都是类,并且至少有一个需要是trait才能在Scala中做到这一点。例如,这行不通:class MySpec extends FunSpec with CamelTestSupport {}
注意:似乎许多关于FunSpec的在线引用都表明它是一个trait,但它是scalatest_2.11-3.0.0-M15中的一个类。
我如何使用ScalaTest FunSpec来测试Camel?
使用JUnit编写的相同测试如下所示:public class DataLakeEventListenerRouteIT extends CamelTestSupport {
@Autowired
private MyRouteBuilder myRouteBuilder;
private MockEndpoint myEndpointMock;
@Override
public boolean isUseAdviceWith() {
return true;
}
@Override
protected JndiRegistry createRegistry() throws Exception {
JndiRegistry registry = super.createRegistry();
//do some required bindings here
return registry;
}
@Before
public void startup() throws Exception {
AdviceWithRouteBuilder mock = new AdviceWithRouteBuilder() {
public void configure() throws Exception {
mockEndpointsAndSkip(myRouteBuilder.MY_ROUTE_URI);
}
};
context.addRoutes(myRouteBuilder);
context.getRouteDefinition(myRouteBuilder.MY_ROUTE_ID)
.adviceWith(context, mock);
myEndpointMock = getMockEndpoint(
"mock:" + myRouteBuilder.MY_ROUTE_URI);
}
@Test
public void timerRouteShouldSendMessage() throws Exception {
// Arrange
context.start();
myEndpointMock.expectedMessageCount(1);
myEndpointMock.assertIsSatisfied();
context.stop();
}
}
其实很简单。ScalaTest提供了一个与FunSpec等价的trait,叫做FunSpecLike。像这样声明测试:
class StoreSVSFileRouteSpec extends CamelTestSupport with FunSpecLike {}