我在为使用Spring Integration DSL的IntegrationFlow编写测试用例时遇到了麻烦。下面是我的代码片段,我想测试一下'转换'部分。请提供一些模拟句柄部分的帮助,或者是否有其他方法来测试它 -
public class DmwConfig {
@Value("${dmw.url.hostname}")
public String hostName;
@Bean
public MessageChannel dmwGetProductDetailsByEanChannel() {
return MessageChannels.direct().get();
}
@Bean
public IntegrationFlow dmwGetProductDetailsByEan() {
return IntegrationFlows
.from("input")
.channel("dmwGetProductDetailsByEanChannel")
.handle(httpMessageHandlerSpec())
.<JsonNode, ProductModel>transform(
node -> new ProductModel(
node.findValue("name").asText(null),
node.findValue("inventory").findValue("orderable").asBoolean(false),
node.findValue("stock_level").asInt(0),
node.findValue("price").asDouble(0),
"", // this url field will be enriched in the controller because the url doesn't contain any data from the response
node.findValue("image_groups").findValue("link").asText(null)
)
)
.get();
}
@Bean
public HttpRequestExecutingMessageHandler httpMessageHandlerSpec() {
return Http
.outboundGateway((Message<DmwPayload> p) -> "foobar url")
.charset("UTF-8")
.httpMethod(HttpMethod.GET)
.expectedResponseType(JsonNode.class).get();
}
}
答案 0 :(得分:1)
我们还没有mocking framework,但这是最近的意图。
您可以考虑使用@MockBean
的最新HttpRequestExecutingMessageHandler httpMessageHandlerSpec
中的.transform
来替换所需的模拟bean。
另一方面,您可以直接向dmwGetProductDetailsByEan.channel#0
的{{3}}发送消息。请从以下短语中阅读该手册:
默认情况下,端点通过DirectChannel连接,其中bean名称基于以下模式:[IntegrationFlow.beanName] .channel#[channelNameIndex]。
因此,您的flow中的必需通道具有bean名称:_dial = new Dialog(this);
_dial.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
_dial.setContentView(_view);
_dial.show();
,因为这是IntegrationFlow定义中的第一个未命名通道。