gpt4 book ai didi

java - 如何测试这条 Camel 路线?依赖注入(inject)和环境变量

转载 作者:行者123 更新时间:2023-12-01 19:38:13 24 4
gpt4 key购买 nike

我有两个疑问:

a.如何以我的路由不知道何时被模拟以及何时是真实的方式模拟 http4 组件?

b.运行测试时如何初始化 myDestinationEndpoint?

package my.package

@Component
public class MyRoute extends RouteBuilder {
@Value("${MY_DESTINATION_ENDPOINT}")
private String myDestinationEndpoint;

from("direct:my-route")
.split()
.method(MyBean.class,"split") //splits the message in two messages. One will pass and other will be redirect to http4
.aggregationStrategy(MyBean.aggregator()) //After redirect to http4, the response will be added to the first message and continue to the next route.
.choice()
.when().method(MyBean.class,"shouldRedirect")
.to("http4:" + myDestinationEndpoint + "?bridgeEndpoint=true") //How to mock here???
.unmarshal(new JacksonDataFormat(Object.class))
.end()
.end()
;
}

尝试了什么?

a.为了Mock,我找到了“mock”组件。但在这种情况下,我在 route 对模拟进行了硬编码。对我来说,就像我有一个带有模拟的测试代码可以在测试环境中运行,而其他类似的代码没有模拟可以在生产中运行。但是,根据我的理解,测试代码应该与生产代码相同。

.when().method(MyBean.class,"shouldRedirect")
.to("mock:" + myDestinationEndpoint)

我期望模拟作为一个接口(interface)工作,在生产中我应该注入(inject)一个真实的对象,在测试中我应该注入(inject)一个假/模拟对象。

b.当我卡在步骤a时。我没有太多时间去调查这个。当运行我的本地主机时,我在 Eclipse 中将 myDestinationEndpoint 设置为 Java 程序参数。运行 em QA 和 PRD 时,我使用配置映射文件 (.yml)。

编辑:尝试实现 ShellDragon 的建议。

我已经实现了这个测试类,但出现了这个错误:

org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.

我在/src/test/resources 和/src/test/resources/my/package 中添加了 FirstTest.properties 文件

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = AgenciaInternalRoute.class) //Classe que contém valores a serem injetados
@TestPropertySource //flag que faz com que a classe indicada em @ContextConfiguration receba os valores de um arquivo de propriedades
public class FirstTest extends CamelTestSupport {

@Autowired
private TestRestTemplate restTemplate;


@Override
protected RouteBuilder createRouteBuilder() throws Exception{
return new MyRoute();
}

@Test
public void simpleTest() {

}
}

最佳答案

您可以使用 adviseWith 拦截到 http4 端点的交换传递,并在测试执行期间将其重新路由到 mock: 端点。原始代码可以保持原样。请看一下测试用例here 。如果您使用的是Camel 3.x,API已更改,请引用this test case相反。

要模拟 @Value 注释,请在 Spring 中使用 TestPropertySource 注释,并使用适当的运行程序(例如 SpringJUnit4ClassRunner)运行测试类。如果您使用 TestPropertySource

,则不需要从命令行进行额外的修改

关于java - 如何测试这条 Camel 路线?依赖注入(inject)和环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56621166/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com