当前位置: 首页 > 知识库问答 >
问题:

使用apachecamel进行单元测试

燕飞文
2023-03-14

我想测试以下骆驼路线。我在网上找到的所有例子都有以文件开头的路由,在我的例子中,我有一个Springbean方法,每隔几分钟就会被调用一次,最后消息被转换并移动到jms以及审计目录。

我对这条路线的写测试毫无头绪。目前我在测试用例中所拥有的是Mockito。when(tradeService.searchTransaction())。然后返回(带有SingleTransaction的数据)

from("quartz2://tsTimer?cron=0/20+*+8-18+?+*+MON,TUE,WED,THU,FRI+*")
.bean(TradeService.class)
.marshal()
.jacksonxml(true)
.to("jms:queue:out-test")
.to("file:data/test/audit")
.end();

共有2个答案

扶隐水
2023-03-14

@点头的手谢谢你的提示,我完全走错了方向。读完你的答案后,我能够写基本的测试,从这一点上,我想我可以把它向前推进。

非常感谢您的时间,但是我看到根据我的路线,它应该将一个XML文件放到审计目录中,而这并没有发生。

看起来中间步骤也被嘲笑了,我没有指定任何东西。

InterceptSendToMockEndpointStrategy - Adviced endpoint [xslt://trans.xslt] with mock endpoint [mock:xslt:trans.xslt]
INFO  o.a.c.i.InterceptSendToMockEndpointStrategy - Adviced endpoint [file://test/data/audit/?fileName=%24%7Bheader.outFileName%7D] with mock endpoint [mock:file:test/data/audit/]
INFO  o.a.camel.spring.SpringCamelContext - StreamCaching is not in use. If using streams then its recommended to enable stream caching. See more details at http://camel.apache.org/stream-caching.html

特劳特。JAVA

    @Override
    public void configure() throws Exception {
        logger.info("TradePublisherRoute.configure() : trade-publisher started configuring camel route.");

        from("{{trade-publisher.sourceEndpoint}}")
        .doTry()
            .bean(tradeService)
            .process(new Processor() {
                @Override
                public void process(Exchange exchange) throws Exception {
                    String dateStr = Constant.dateFormatForFileName.format(new Date());
                    logger.info("this is getting executed : " + dateStr);
                    exchange.setProperty(Constant.KEY_INCOMING_XML_FILE_NAME, "REQ-" + dateStr + Constant.AUDIT_FILE_EXTENSION);
                    exchange.setProperty(Constant.KEY_OUTGOING_XML_FILE_NAME, "RESP-" + dateStr + Constant.AUDIT_FILE_EXTENSION);
                }
            })
            .marshal()
            .jacksonxml(true)
            .wireTap("{{trade-publisher.requestAuditDir}}" + "${header.inFileName}")
            .to("{{trade-publisher.xsltFile}}")
            .to("{{trade-publisher.outboundQueue}}")
            .to("{{trade-publisher.responseAuditDir}}" + "${header.outFileName}")
            .bean(txnService, "markSuccess")
        .endDoTry()
        .doCatch(Exception.class)
            .bean(txnService, "markFailure")
            .log(LoggingLevel.ERROR, "EXCEPTION: ${exception.stacktrace}")
        .end();

TradePublisherRouteTest。JAVA

@ActiveProfiles("test")
@RunWith(CamelSpringBootRunner.class)
@SpringBootTest(classes = TradePublisherApplication.class)
@MockEndpoints
public class TradePublisherRouteTest {

    @EndpointInject(uri = "{{trade-publisher.outboundQueue}}")
    private MockEndpoint mockQueue;

    @EndpointInject(uri = "{{trade-publisher.sourceEndpoint}}")
    private ProducerTemplate producerTemplate;

    @MockBean
    TradeService tradeService;

    private List<Transaction> transactions = new ArrayList<>();

    @BeforeClass
    public static void beforeClass() {

    }

    @Before
    public void before() throws Exception {
        Transaction txn = new Transaction("TEST001", "C001", "100", "JPM", new BigDecimal(100.50), new Date(), new Date(), 1000, "P");
        transactions.add(txn);

    }

    @Test
    public void testRouteConfiguration() throws Exception {
        Mockito.when(tradeService.searchTransaction()).thenReturn(new Data(transactions));
        producerTemplate.sendBody(transactions);
        mockQueue.expectedMessageCount(1);
        mockQueue.assertIsSatisfied(2000);
    }

如果我做错了,请纠正我!

马奇略
2023-03-14

使用ApacheCamel和Spring Boot进行测试非常简单。

只需执行以下操作(下面的示例是一个抽象示例,只是为了给您一个如何执行的提示):

使用Spring Boot注释来配置测试类。

@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.NONE)
@RunWith(SpringRunner.class)
public class MyRouteTest {
    @EndpointInject(uri = "{{sourceEndpoint}}")
    private ProducerTemplate sourceEndpoint;
    ....
    public void test() {
        // send your body to the endpoint. See other provided methods too.
        sourceEndpoint.sendBody([your input]);
    }
}

src/test/application.properties中:配置您的Camel-Endpoint,如源和目标:

sourceEndpoint=direct:myTestSource

在使用spring boot时,最好不要直接在路由中硬连接起始endpoint,而是使用应用程序。属性。这样,模拟endpoint进行单元测试就更容易了,因为您可以在不更改源代码的情况下更改为direct-组件。

这意味着,您应该编写:from(“{sourceEndpoint}”)

并在您的application.properties配置ourceEndpointourceEndpoint=QUITZ2://tsTimer?0/20 * 8-18*周一,周二,周三,周四,周五*

这样你也可以在不同的情况下使用你的路线。

有关如何使用spring boot进行测试的良好文档可以在以下位置找到:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html

阿帕奇骆驼:http://camel.apache.org/testing.html

 类似资料:
  • 问题内容: 我选择的数据库是MongoDB。我正在编写一个数据层API,以从客户端应用程序中抽象实现细节- 也就是说,我实质上是在提供一个公共接口(一个充当IDL的对象)。 我正在以TDD方式测试自己的逻辑。在每个单元测试之前,调用一个方法来创建数据库单例,此后,当测试完成时,将调用一个方法来删除数据库。这有助于促进单元测试之间的独立性。 几乎所有单元测试(即 执行上下文查询 )都需要先进行某种插

  • 我正在构建一个android应用程序,它使用Firebase作为后端,并采用模型、视图和演示者架构。然而,Firebase是一种云服务的事实使我的android应用程序中的自动测试变得复杂。到目前为止,我已经构建了大部分身份验证系统,但无法看到如何在我的应用程序中实现Firebase代码的单元测试。在端到端测试方面,我也陷入了困境。 由于测试是任何android应用程序的基础,没有it应用程序开发

  • 问题内容: 我的公司一直在评估Spring MVC,以确定我们是否应该在下一个项目中使用它。到目前为止,我喜欢我所看到的内容,现在,我正在查看Spring Security模块,以确定是否可以/应该使用它。 我们的安全要求非常基本。用户只需要能够提供用户名和密码即可访问网站的某些部分(例如获取有关其帐户的信息);并且网站上的页面很少(常见问题解答,支持等),应该为匿名用户提供访问权限。 在我创建的

  • 使用Android Studio进行单元测试 原文链接 : Unit Testing With Android Studio 原文作者 : Rex St John 译文出自 : 开发技术前线 www.devtf.cn 译者 : ZhaoKaiQiang 校对者: zhengxiaopeng 状态 : 校对完 这篇文章介绍了在Android Studio中进行单元测试的基础部分。 很多教程都指导你应

  • 我想测试我的SpringBoot应用程序,它使用cassandra作为CrudRepository。我最终得到了 具有 和 这就导致了 如果我使用旧版本的cassandra-unit-Spring 它以NullPointerException结束,因为没有注入值repo。 来源https://github.com/StephanPraetsch/spring.boot.cassandra.unit

  • 问题内容: 我对Node相对较新,并且正在使用knex和书架进行项目。我在对代码进行单元测试时遇到了一些麻烦,但是我不确定自己做错了什么。 基本上,我有一个看起来像这样的模型(称为VorcuProduct): 还有一个函数,如果数据库中不存在VorcuProduct,它将保存它。非常简单。执行此操作的函数如下所示: 哪种方法可以在不影响数据库的情况下进行测试?我是否需要模拟以返回模型或未定义模型(