2013-12-24 4 views
0

Мое приложение вызывает внешний Soap WS с использованием SpringSWS WebServiceTemplate, который я издеваюсь над своими тестами с помощью MockWebServiceServer.Как тестировать заголовок SOAPAction с помощью теста Spring WS

Он отлично работает, чтобы имитировать отклик в зависимости от полезной нагрузки запроса.

Но теперь я хочу проверить, какое действие SOAP вызывается. Он должен быть определен в HTTP-заголовке «SOAPAction» запроса.

Я использую Spring-WS 2.1.4.

Кто-нибудь знает, можно ли это проверить и как?

Вот мой тестовый класс:

public class MyWebServiceTest { 
    @Autowired 
    private WebServiceTemplate webServiceTemplate; 

    private MockWebServiceServer mockServer;            

    @Before 
    public void createServer() throws Exception { 
     mockServer = MockWebServiceServer.createServer(webServiceTemplate); 
    } 

    @Test 
    public void callStambiaWithExistingFileShouldSuccess() throws IOException { 

     Resource requestPayload = new ClassPathResource("request-payload.xml"); 
     Resource responseSoapEnvelope = new ClassPathResource("success-response-soap-envoloppe.xml"); 

     mockServer.expect(payload(requestPayload)).andRespond(withSoapEnvelope(responseSoapEnvelope)); 
     //init job 
     //myService call the webservice via WebServiceTemplate 
     myService.executeJob(job); 

     mockServer.verify(); 
     //some asserts 
    } 

} 

Так что я хочу, чтобы проверить это действие мыла называется. Так что я хочу что-то вроде этого в моем тестовом классе:

mockServer.expect(....withSoapAction("calledSoapAction")).andRespond(... 
+0

Можете ли вы объяснить немного больше ваш тестовый сценарий? – VirtualTroll

+0

Я добавил немного фрагмента, надеюсь, это станет более ясным. – Matt

ответ

2

Создание свой собственный RequestMatcher довольно прост:

public class SoapActionMatcher implements RequestMatcher { 

    private final String expectedSoapAction; 

    public SoapActionMatcher(String expectedSoapAction) { 
     this.expectedSoapAction = SoapUtils.escapeAction(expectedSoapAction); 
    } 

    @Override 
    public void match(URI uri, WebServiceMessage request) 
      throws IOException, AssertionError { 
     assertThat(request, instanceOf(SoapMessage.class)); 
     SoapMessage soapMessage = (SoapMessage) request; 
     assertThat(soapMessage.getSoapAction(), equalTo(expectedSoapAction)); 
    } 
} 

Использование

mockServer.expect(connectionTo("http://server/")) 
     .andExpect(new SoapActionMatcher("calledSoapAction")) 
     .andRespond(withPayload(...))); 
Смежные вопросы