1

我有个问题 :

我有两个组件 A 和 B(两场战争):

A 用于存储(Neo4J),B 用于搜索(Elasticsearch)。

组件之间的通信由 Spring Integration 使用 HTTP Inbound/Outbound 管理。

这是我的spring集成配置文件:服务器A(存储)

<int:annotation-config/>
<bean class="org.springframework.integration.http.inbound.UriPathHandlerMapping"/>

 <int:gateway id="searchGateway"
             service-interface="xxxxx.IAuditSearchService"/>

<int-http:outbound-gateway auto-startup="true"
                           request-channel="sendRequest"
                           url="http://localhost:8081/B/api/es"
                           extract-request-payload="true"/>

<int-http:inbound-gateway request-channel="searchResult"
                          request-payload-type="xxxxx.SearchResult"
                          path="/api/searchResult"
                          supported-methods="POST"/>

<int:object-to-json-transformer auto-startup="true"
                                id="objectToJson" input-channel="searchRequest"
                                output-channel="sendRequest">
</int:object-to-json-transformer>

<int:json-to-object-transformer input-channel="searchReply"
                                auto-startup="true"
                                id="jsonToObject" output-channel="searchResult"
                                type="xxxxxxxx.SearchResult">
</int:json-to-object-transformer>

<int:channel id="searchRequest"/>
<int:channel id="sendRequest"/>
<int:channel id="searchReply"/>
<int:channel id="searchResult"/>

在另一边:服务器 B:

    <int:annotation-config/>
<beans:bean class="org.springframework.integration.http.inbound.UriPathHandlerMapping"/>

<int-http:inbound-gateway request-channel="searchRequest"
                          reply-channel="searchReply"
                          path="/api/es"
                          request-payload-type="xxxx.AuditChange"
                          supported-methods="POST"/>


<int:gateway id="searchGateway"
             service-interface="xxxx.IAbSearchResult"/>

<int-http:outbound-gateway auto-startup="true"
                           request-channel="searchResult"
                           url="http://localhost:9080/A/api/searchResult"/>


<int:json-to-object-transformer id="jsonToObject" input-channel="searchRequest"
                                type="xxxxxx.AuditChange"/>
<int:object-to-json-transformer id="objectToJson" input-channel="searchReply" output-channel="searchResult"/>

<int:channel id="searchRequest"/>
<!--<int:channel id="esDelete"/>-->
<int:channel id="searchReply"/>
<int:channel id="searchResult"/>

我的问题 :

我想做一个从服务器 A 到服务器 B 到服务器 A 的集成测试。

最好的策略是什么?没有嘲笑就可以做到吗?可以在不启动服务器的情况下做到这一点吗?(服务器 A 和 B 停机)

最好的问候纳比尔贝拉克比尔

4

2 回答 2

2

我不确定这是你想要的集成测试。

您可以使用 Spring mvc 测试框架来测试入站网关,而无需启动任何服务器。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { /*omitted*/ })
@WebAppConfiguration
public class HttpInboundGatewayIntegrationTests {
    private MockMvc mockMvc;

    @Autowired
    private WebApplicationContext wac;

    @Before
    public void setup() throws Exception {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void testInboundGateway()
        throws Exception {
    //

        mockMvc.perform(get("/api/searchResult").
            param("aParam", aParam).
            param("anotherParam",anotherParam)).
            andExpect(status().isForbidden());
}

但是如果你只想测试网关,你最好将 spring 配置分散到不同的 xml 中(例如,a-http-gateway.xml 仅用于 InboundGateway)。

另一方面,必须启动服务器以测试出站网关,而无需存根或模拟。也许你对https://github.com/dreamhead/moco感兴趣,它是一个简单的框架来存根 http 服务器。

于 2013-07-16T01:18:14.770 回答
1

有关如何独立测试流程的想法,请参阅测试示例高级测试示例。

于 2013-07-16T03:14:36.130 回答