2015-09-01 3 views
2

Мне нужно проверить следующий код с помощью JUnit. Это выглядит сложным для меня, и я даже не уверен, с чего начать.Советы по тестированию JUnit Java

Я знаю, что делает этот метод, но я не могу написать для него тест JUnit. Мы следим за шаблоном или сохраняем некоторые ключевые моменты при тестировании любой части кода.

protected WebResource.Builder applyHeaders(WebResource service, List<? extends BaseClientHeader<?>> headers, List<HttpRequestClientHeader> httpHeaders) { 
     WebResource.Builder wrb = service.getRequestBuilder(); 
     if(headers != null) { 
      for(BaseClientHeader<?> header : headers) { 
       wrb = wrb.header(((IEnum)header.getName()).value(), header.getValue()); 
      } 
     } 

     if(httpHeaders != null) { 
      for(HttpRequestClientHeader header : httpHeaders) { 
       wrb = wrb.header(header.getName().value(), header.getValue()); 
      } 
     } 

     return wrb; 
    } 

Спасибо,

+0

Если вы запуганы путем тестирования метода, разложите его на более мелкие методы и протестируйте отдельные части. – Zarwan

+0

Если вы можете получить копию http://www.amazon.in/Working-Effectively-Legacy-Robert-Martin/dp/0131177052, которая поможет – Jayan

+0

Я знаю, как использовать JUnit и методы тестирования, но когда дело доходит до тестирование API или методов, вызывающих другие методы, заставляет меня запутать. –

ответ

0

Даже если этот метод выглядит, как он делает много разных вещей, и взаимодействует много другого кода, она должна быть достаточно простой, чтобы проверить; это потому, что он работает только на объектах, которые вы вводите. Давайте посмотрим ...

@Test 
public void requestBuilderIsReturned() { 
    WebResource webResource = Mockito.mock(WebResource.class); 
    WebResource.Builder webResourceBuilder = mock(WebResource.Builder.class); 
    when(webResource.getRequestBuilder()).thenReturn(webResourceBuilder); 

    WebResource.Builder createdBuilder = objectUnderTest.applyHeaders(webResource, null, null); 

    assertThat(createdBuilder, is(webResourceBuilder)); 
} 

Это было довольно прямолинейно. Для проверки правильности работы на обоих видах заголовков, вам нужно, чтобы получить немного сложнее, я полагаю:

when(webResourceBuilder.header(anyString(), anyString())).thenReturn(webResourceBuilder); 

Это просто сделать метод header() возвращает объект он призвал. После этого она должна быть достаточно простой, чтобы убедиться, что правильные методы были названы:

verify(webResourceBuilder).header("header1", "value1"); 
    verify(webResourceBuilder).header("header2", "value2"); 

Вооруженный с этим вы должны быть в состоянии модульного тестирования дерьмо из этого конкретного метода. :)

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