如何将JunitTest与Camel,ActiveMQ和外部API

时间:2017-07-17 08:38:27

标签: spring-boot apache-camel activemq alfresco

我尝试使用camel,activeMq和Alfresco API设置JunitTest

我想测试的路线是:

from(Constantes.Direct.DIRECT_GET_AUTHENTIFICATION_TICKET)
        .setBody().simple("{"
                        + "\"userId\": \"userId\","
                        +"\"password\": \"password\""
                        +"}")
        .setHeader(Exchange.HTTP_METHOD,constant(Constantes.Headers.HTTP_POST))
        .setHeader(Exchange.HTTP_URI,simple(Constantes.Urls.OBTENIR_TICKET))
    .to(Constantes.Urls.DUMMYHOST).convertBodyTo(String.class)
        .unmarshal().json(JsonLibrary.Jackson, TicketAlfresco.class).process(new Dumper())
        .process(new TokenBase64Proc())
        .setHeader(Constantes.Headers.SENDER, constant(Constantes.Headers.ALFRESCO))
        .setHeader(Constantes.Headers.API_ACTION, constant(SET_ALFRESCO_TOKEN))
        .setHeader(Constantes.Headers.HEADER_AUTHORIZATION, simple("${body}"))
    .inOut(Constantes.ActiveMq.ACTIVEMQ_IN)
    .end();

第一个"到"向Alfresco API发送请求并返回新令牌。 最后一个inOut将令牌发送到activeMQ。

问题在于,当我想测试我的路线时,当测试到达activeMq内的inOut时,测试失败,因为它没有得到任何答案。

我是否需要安装和嵌入代理activeMQ,还是需要模拟ActiveMQ?我怎么能这样做?

暂时让它运行我使用:

mockEndpointsAndSkip("activemq:IN")

但我不确定这是一个好的解决方案。

这是我目前的测试:

@RunWith(SpringRunner.class)
@EnableAutoConfiguration
@ComponentScan(basePackages = {"fr.gif.wsp.web.service.alfresco*"})

public class RouteGetAuthentificationTicketTest扩展了CamelTestSupport {

@Autowired private RouteGetAuthentificationTicket routeGetAuthentificationTicket;

//Route to test
private final static String FOURNISSEUR_GET_AUTHENTIFICATION_TICKET = Constantes.Direct.DIRECT_GET_AUTHENTIFICATION_TICKET;
private final static String MOCK_FOURNISSEUR_GET_AUTHENTIFICATION_TICKET = "mock:" + FOURNISSEUR_GET_AUTHENTIFICATION_TICKET;
// Mock result
private final static String MOCK_RESULT = "mock:result";
//Data
private final static String BODY = "Content of the body";

@Override
protected RoutesBuilder createRouteBuilder() {
    return routeGetAuthentificationTicket; 
}

@Before
public void setContextRoute() throws Exception  {
    context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
        @Override
        public void configure() throws Exception {
            mockEndpointsAndSkip("activemq:IN");
            weaveAddLast().to(MOCK_RESULT);
        }
    });
}

@Test
public void getAuthentificationTicket() throws InterruptedException {

    final MockEndpoint resultEndpoint = context.getEndpoint(MOCK_FOURNISSEUR_GET_AUTHENTIFICATION_TICKET, MockEndpoint.class);

    context.createProducerTemplate().sendBody(FOURNISSEUR_GET_AUTHENTIFICATION_TICKET, BODY);
    resultEndpoint.assertIsSatisfied();

    final Object result = context.createProducerTemplate().requestBody(FOURNISSEUR_GET_AUTHENTIFICATION_TICKET, BODY);
    assertNotNull(result);
}}

感谢您的时间

0 个答案:

没有答案