Apache骆驼服务的Junit测试用例

时间:2016-07-05 12:22:36

标签: java sql rest junit apache-camel

我创建了apache camel rest服务来查询来自DB的数据

.get("/{id}/CodeId").description("get the CodeId").outType(String.class)
                .id("CodeId").param().name("codeid").type(RestParamType.path).description("Getting Id")
                .dataType("string").endParam().route()
                .to("sql:select * from table1 where C_ID=:#${header.codeid} ")
                .process(new Processor() {

                    @Override
                    public void process(Exchange ex) throws Exception {
                        String JId = null;
                        try {
                            List<HashMap> version = (List<HashMap>) ex.getIn().getBody();
                            if (version != null && version.size() > 0) {
                                LOG.debug(
                                        "jId------------------------------>" + version.get(0).get("J_ID"));
                                JId = (String) version.get(0).get("J_ID");
                            }

                            ex.getIn().setBody(JId, String.class);
                            ex.getIn().setHeader(Exchange.HTTP_RESPONSE_CODE, 201);
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                    }
                }).endRest();

实际上它工作正常,但我无法为服务编写junit测试用例。

任何人都可以建议我编写一个Junit测试用例来检查服务中的值吗?

2 个答案:

答案 0 :(得分:1)

您可以使用任何http客户端(例如camel-http)

roles_name

示例代码在scala中,但我确信你明白了

编辑:根据请求获取模拟的样本:

class RestDemoTest extends CamelTestSupport {
  override def createRouteBuilder(): RouteBuilder = new RestDslRoutes()

  @Test
  def smokeTest(): Unit ={
    val body: String = template.requestBodyAndHeader("http://localhost:9898/demo/status","",Exchange.HTTP_METHOD, "GET", classOf[String])
    org.junit.Assert.assertThat(body,Is.is("Running"))
  }

}

答案 1 :(得分:1)

事实上,我已经记录了单元测试用例的所有内容:

http://bushorn.com/unit-testing-apache-camel/

http://bushorn.com/camel-unit-testing-using-mock-endpoint/

在您的方案中,您需要做的是,您必须使用直接端点替换路径中端点的任何其余部分。这样您就可以从单元测试用例中发送任何有效负载。它总是一个很好的做法,做这些单元测试用例协议不可知。这意味着,在您的单元案例中不涉及REST,JMS,STOMP或任何外部调用,这样您就可以专注于仅测试路由逻辑。无论如何,您可以在集成测试中涵盖协议级别测试。

干杯。