我创建了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测试用例来检查服务中的值吗?
答案 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或任何外部调用,这样您就可以专注于仅测试路由逻辑。无论如何,您可以在集成测试中涵盖协议级别测试。
干杯。