我目前正试图用Apache Camel测试一条现有的路线,但我不确定我做得对不对,因为我不完全理解Camel背后的所有概念。
话虽如此,以下是我想做的,关于以下示例路线:
public class TestExampleRoute extends SpringRouteBuilder {
/** The Constant ENDPOINT_EDOSSIER_IMPORT. direct:edossierImport */
public static final String ENDPOINT_EXAMPLE = "direct:testExampleEndpoint";
@Override
public void configure() throws Exception {
// @formatter:off
from(ENDPOINT_EXAMPLE).routeId("testExample")
.bean(TestExampleProcessor.class, "getImportDocumentProcess").id("getImportDocumentProcess")
.bean(TestExampleProcessor.class, "createImportDocumentTraitement").id("createImportDocumentTraitement")
.to(BaseEndpoint.LOG_MESSAGE_SHOW_ALL_MULTILINE);
// @formatter:on
}
}
这里的要点就是获取一个ImportDocumentProcess,并创建一个依赖于前一个对象的ImportDocumentTraItem。ImportDocument过程是通过exchange进行的。
以下是处理器代码:
@Component("testExampleProcessor")
public class TestExampleProcessor {
/** The Constant LOGGER. */
private static final Logger LOGGER = LogManager.getLogger(TestExampleProcessor.class);
@Autowired
ImportDocumentTraitementService importDocumentTraitementService;
@Autowired
ImportDocumentProcessDAO importDocumentProcessDAO;
@Autowired
ImportDocumentTraitementDAO importDocumentTraitementDAO;
// ---- Constants to name camel headers and bodies
private static final String HEADER_ENTREPRISE = "entreprise";
private static final String HEADER_UTILISATEUR = "utilisateur";
private static final String HEADER_IMPORTDOCPROCESS = "importDocumentProcess";
public void getImportDocumentProcess(@Header(HEADER_ENTREPRISE) Entreprise entreprise, Exchange exchange) {
LOGGER.info("Entering TestExampleProcessor method : getImportDocumentProcess");
Utilisateur utilisateur = SessionUtils.getUtilisateur();
ImportDocumentProcess importDocumentProcess = importDocumentProcessDAO.getImportDocumentProcessByEntreprise(
entreprise);
exchange.getIn().setHeader(HEADER_UTILISATEUR, utilisateur);
exchange.getIn().setHeader(HEADER_IMPORTDOCPROCESS, importDocumentProcess);
}
public void createImportDocumentTraitement(@Header(HEADER_ENTREPRISE) Entreprise entreprise,
@Header(HEADER_UTILISATEUR) Utilisateur utilisateur,
@Header(HEADER_IMPORTDOCPROCESS) ImportDocumentProcess importDocumentProcess, Exchange exchange) {
LOGGER.info("Entering TestExampleProcessor method : createImportDocumentTraitement");
long nbImportTraitementBefore = this.importDocumentTraitementDAO.countNumberOfImportDocumentTraitement();
ImportDocumentTraitement importDocumentTraitement = this.importDocumentTraitementService.createImportDocumentTraitement(
entreprise, utilisateur, importDocumentProcess, "md5_fichier_example_test", "fichier_example_test.xml");
long nbImportTraitementAfter = this.importDocumentTraitementDAO.countNumberOfImportDocumentTraitement();
exchange.getIn().setHeader("nbImportTraitementBefore", Long.valueOf(nbImportTraitementBefore));
exchange.getIn().setHeader("nbImportTraitementAfter", Long.valueOf(nbImportTraitementAfter));
exchange.getIn().setHeader("importDocumentTraitement", importDocumentTraitement);
}
}
我已经读了一些关于AdviceBy和WeaveById的事情,我想把测试两件事之间的交换路线的状态。
以下是我对处理器测试的尝试:
@ContextConfiguration(locations = { "classpath:/camel-context.xml" })
public class TestExampleProcessorTest extends CamelTestSupport {
@Override
protected RouteBuilder createRouteBuilder() {
return new TestExampleRoute();
}
@Override
public boolean isUseAdviceWith() {
return true;
}
@Before
public void mockEndPoints() throws Exception {
context.getRouteDefinitions().get(0).adviceWith(context, new AdviceWithRouteBuilder() {
@Override
public void configure() throws Exception {
weaveById("getImportDocumentProcess").replace().multicast().to("mock:catchTestEndpoint");
}
});
}
@Test
public void testAdvised() throws Exception {
MockEndpoint mockEndpoint = getMockEndpoint("mock:catchTestEndpoint");
context.start();
mockEndpoint.expectedMessageCount(1);
mockEndpoint.assertIsSatisfied();
context.stop();
}
}
最后一件事:我正在使用Camel 2.18.0。
如何测试每条路线之间的交换状态?我错过了什么?
编辑:刚刚编辑了测试类的代码(编译并运行),但我得到了以下断言错误:
java.lang.AssertionError: mock://catchTestEndpoint Received message count. Expected: <1> but was: <0>
这又增加了一个问题:为什么信息没有被正确捕获?
谢谢你的帮助。
你有给你发消息吗?我在代码里看不到。例如
样板发送体(“direct:testExampleEndpoint”、“Hello World”);
我发现Junit5从5.3版本开始就支持并行性,但我找不到任何关于如何使用csv源代码运行并行测试的参考。你有什么建议吗?
我正在尝试使用2个xml文件与Maven并行运行我的测试,但似乎不起作用。我已经尝试了Maven留档中的步骤/参数:http://maven.apache.org/surefire/maven-surefire-plugin/examples/testng.html 以下是我的pom.xml文件: 这是功能1.xml文件: 我应该做哪些参数/更改才能使其生效? 谢谢你
问题内容: 我希望能够在使用jest时使用webpack别名来解析导入,并且最好参考以避免重复。 开玩笑的conf: Webpack别名: 进口: 由于某种原因,导致了问题,因此将其删除(使用别名和导入)时,可以找到但仍然无法解决。 我尝试使用jest-webpack-alias,babel-plugin-module-resolver和Jest / Webpack docs 问题答案: 这似乎已
问题内容: 我对Node相对较新,并且正在使用knex和书架进行项目。我在对代码进行单元测试时遇到了一些麻烦,但是我不确定自己做错了什么。 基本上,我有一个看起来像这样的模型(称为VorcuProduct): 还有一个函数,如果数据库中不存在VorcuProduct,它将保存它。非常简单。执行此操作的函数如下所示: 哪种方法可以在不影响数据库的情况下进行测试?我是否需要模拟以返回模型或未定义模型(
我有spring boot应用程序,spring boot版本为1.5.8,驼峰版本为2.20.1 简单路线: 简单测试: 当我运行这个测试时,它运行得很好,我收到一条消息,endpoint满意。如果我添加注释,测试会失败吗?为什么?在运行maven clean install时也没有注释,它也会失败:( 有人知道这个注释对骆驼测试有什么作用吗,或者我如何调整它使其工作? 谢谢你
简介 在之前的章节我们实现了一个简单但是功能齐全的web项目、学习了如何使用Gradle来构建和运行这个项目。测试代码是软件开发周期中非常重要的一环,能够确保软件的行为能符合预期。这一章我将讲述如何使用Gradle来组织、配置和执行测试代码,学习如何写单元测试、集成测试和功能测试并把他们集成到项目构建中。 Gradle集成了很多Java和Groovy测试框架,在本章的最后你会用JUnit、Test