我需要使用JUnit测试以下代码。这看起来很复杂,我甚至不确定从哪里开始。
我知道该方法正在做什么,但我无法为它编写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 :(得分: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");
有了这个,您应该可以通过这种特殊方法对狗屎进行单元测试。 :)