JUnit测试提示Java

时间:2015-09-01 02:41:09

标签: java

我需要使用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;
    }

谢谢,

1 个答案:

答案 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");

有了这个,您应该可以通过这种特殊方法对狗屎进行单元测试。 :)