суббота, 22 сентября 2012 г.

Spring Web Services. Тестирование клиента к веб-сервису.

Автономное тестирование клиента к веб-сервису без самого сервиса позволяет получить уверенность в том, что клиент работает как в стандартных ситуациях, так и не очень.
К стандартным ситуациям следует отнести ситуацию, когда сервис выдаёт ожидаемый ответ.
К нестандартным ситуациям следуюет отнести ситацию, когда сервис выдает исключение.

В нашем распоряжении есть следующее ПО:
  1. jUnit 4.10
  2. Spring WS 2.1.0 
  3. Eclipse
Рассмотрим следующий пример сервиса. На вход принимается две строки, на выходе выдаётся их склейка. Для тестирования клиента используется класс MockWebServiceServer. Перед вызовом клиента нам необходимо установить последовательность пар вызовов и ответов веб-сервиса.

Это осуществляется в строке: mockServer.expect(RequestMatchers.payload(expectedRequestPayload)).andRespond(ResponseCreators.withPayload(responsePayload)); 

Далее мы осуществляем вызов нашего клиента к веб-сервису, и в конце теста
вызываем метод mockServer.verify(). Этот метод проверяет, что веб-сервис получил все ожидаемые запросы от клиента. Если какие-то запросы не пришли, то unit тест не пройдёт.

За более подробным описанием предлагаю обратиться к описанию класса MockWebServiceServer.
Также можно прогнать пример ниже.

 @RunWith(SpringJUnit4ClassRunner.class)  
 @ContextConfiguration("/context.xml")  
 public class MyWebServiceClientIntegrationTest {  
   @Resource(name="webServiceTemplate")  
   org.springframework.ws.client.core.WebServiceTemplate webServiceTemplate;  
   private MockWebServiceServer mockServer;  
   @Before  
   public void createServer() throws Exception {  
     mockServer = MockWebServiceServer.createServer(webServiceTemplate);  
   }  
   @Test  
   public void testExpected() throws Exception {  
     String request = "<ConcatRequest xmlns=\"http://www.chernykh.ru/myfirst\">"+  
         "<p1>1</p1>"+  
         "<p2>2</p2>"+  
         "</ConcatRequest>";  
     String request2 = "<ConcatRequest xmlns=\"http://www.chernykh.ru/myfirst\">"+  
         "<p1>1</p1>"+  
         "<p2>2</p2>"+  
         "</ConcatRequest>";  
     String response = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><ConcatResponse xmlns=\"http://www.chernykh.ru/myfirst\"><out>12</out></ConcatResponse>";  
     Source expectedRequestPayload =  
         new StringSource(request);  
     Source responsePayload = new StringSource(response);  
     mockServer.expect(RequestMatchers.payload(expectedRequestPayload)).andRespond(ResponseCreators.withPayload(responsePayload));  
     ByteArrayOutputStream output = new ByteArrayOutputStream();   
     StreamResult result = new StreamResult(output);  
     String uri = "http://localhost:8080/test/service";  
     webServiceTemplate.sendSourceAndReceiveToResult(uri,new StringSource(request2), result);  
     String resultStr = "";   
     resultStr = new String(output.toByteArray(), UTF_8.utf8);  
     mockServer.verify();  
     System.out.println("Finished:"+resultStr);  
   }  
 }  

Комментариев нет:

Отправить комментарий