2013-07-15 5 views
1

У меня есть проблема:Интеграция тестирования с пружинной интеграцией

У меня есть два компонент А и В (две войны):

А для хранения (Neo4j) и B для поиска (Elasticsearch).

Связь между компонентами управляется интеграцией Spring с использованием HTTP Inbound/Outbound.

Вот мои файлы конфигурации для пружинного интеграции: Сервер (Storage)

<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"/> 

Мой вопрос:

I хотите выполнить интеграционный тест с сервера A на сервер B на сервер A.

Какая стратегия? Можно ли это сделать без насмешек? Это можно сделать без запуска серверов? (Серверы А и вниз)

С наилучшими пожеланиями Набиль Belakbir

ответ

1

Я не уверен, что это нужно для интеграции тестов.

Вы можете использовать среду тестирования 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()); 
} 

Но если вы хотите проверить только шлюз, вы бы лучше Sperate пружинной конфигурации в различные XMLs (а-HTTP-gateway.xml для одной только InboundGateway, например).

С другой стороны, сервер должен быть запущен для тестирования исходящего шлюза без прерывания или издевательств. Может быть, вас интересует https://github.com/dreamhead/moco, это простая структура для остановки http-сервера.

+0

Спасибо за ваш ответ. Моя проблема заключается в том, что сервер A и сервер B компилируются отдельно. Тест Spring Spring MVC позволит мне протестировать InboundGateway без запуска сервера A. Я могу это сделать и путем тестирования Gateway directelly. Проблема в том, что когда сервер A попытается добраться до сервера B. В этом случае сервер B должен быть запущен или посмеяться. Я не нашел другого способа сделать это правильно. Спасибо также за moco Это может быть полезно в моем случае – Nabil

Смежные вопросы