JUnit测试提示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;
    }

谢谢,

即使这个方法看起来做了许多不同的事情,并与许多其他代码交互,它应该相当容易测试;那是因为它只对你交上来的东西起作用。让我们看看…

@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");
有了这个,您应该能够对这个特定方法进行单元测试。:)

最新更新