gpt4 book ai didi

java - Camel 测试 - 如何从 FileConsumer/FTPConsumer 测试处理器?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:13:12 24 4
gpt4 key购买 nike

我有一个 Camel 路线,它从 ftp 服务器轮询文件并将文件发送到 s3。我在路由中有一些处理器根据文件名计算/操作标题。我需要测试这条路线,如何注入(inject)我的处理器并在我的处理器中使用文件语言?

@RunWith(MockitoJUnitRunner.class)
public class CamelS3HeadersProcessorTest extends CamelTestSupport {
private String filePath = "src/test/resources/sample.txt";

// @Autowired
// private CamelS3HeadersProcessor camelS3HeadersProcessor;

@Test
public void shouldSetS3HeadersProperly() throws Exception {
File file = new File(filePath);
template.sendBody("direct:start", file);
getMockEndpoint("mock:result").expectedMessageCount(1);
getMockEndpoint("mock:result").expectedHeaderReceived(S3Constants.KEY, file.getName());
assertMockEndpointsSatisfied();
}

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").process(new CamelS3HeadersProcessor()).to("mock:result");
}
};
}
}

处理器:

@Component
public class CamelS3HeadersProcessor implements Processor {
@Override
public void process(Exchange exchange) throws Exception {
SimpleBuilder simpleBuilder = new SimpleBuilder("${file:name}");
String fileName = simpleBuilder.evaluate(exchange, String.class);
//do some logic and set headers
}
}

我不想模拟我的处理器。我想模拟我的端点并测试我的处理器。

问题:

  1. 无法 Autowiring /注入(inject)我的处理器。

  2. 文件名被评估为空。如何使用 FileConsumer/FTPConsumer 代替 ProducerTemplate?

最佳答案

我认为在 createRouteBuilder 中你将只有 CamelContext 而不是 ApplicationContext。您可以在测试中或在 @Before 方法中构建路由。

它对我来说是这样的:

@SpringBootTest
@EnableAutoConfiguration
@RunWith(CamelSpringRunner.class)
public class MyProcessorTest extends AbstractJUnit4SpringContextTests {

@Autowired
private CamelContext camelContext;

@Autowired
private MyProcessor myProcessor;

@EndpointInject(uri = "mock:result")
private MockEndpoint resultEndpoint;

@Produce(uri = "direct:start")
private ProducerTemplate template;

@Before
public void setUp() throws Exception {
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("direct:start").process(myProcessor).to("mock:result");
}
});
camelContext.start();
}

@DirtiesContext
@Test
public void test1() throws Exception {
resultEndpoint.expectedMessageCount(1);
String myProcessorInput = "test"; // or Object
template.sendBody(myProcessorInput);

resultEndpoint.assertIsSatisfied();

// or other result Type
String body = (String)resultEndpoint.getExchanges().get(0).getIn().getBody(String.class);

assertNotNull(body);
// tests
}

@DirtiesContext
@Test
public void test2() throws Exception {
}
}

关于java - Camel 测试 - 如何从 FileConsumer/FTPConsumer 测试处理器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713681/

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