JUnit测试提示Java

JUnit测试提示Java,java,Java,我需要使用JUnit测试以下代码。在我看来这很复杂,我甚至不知道从哪里开始 我知道这个方法在做什么,但我无法为它编写JUnit测试。在测试任何一段代码时,我们是遵循一种模式还是牢记一些关键点 protected WebResource.Builder applyHeaders(WebResource service, List<? extends BaseClientHeader<?>> headers, List<HttpRequestClientHeader&g

我需要使用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;
    }
protectedwebresource.Builder applyHeaders(WebResource服务,List>headers,List-httpHeaders){
WebResource.Builder wrb=service.getRequestBuilder();
如果(标题!=null){
用于(BaseClientHeader标题:标题){
wrb=wrb.header(((IEnum)header.getName()).value(),header.getValue());
}
}
if(httpHeaders!=null){
for(HttpRequestClientHeader标头:httpHeaders){
wrb=wrb.header(header.getName().value(),header.getValue());
}
}
返回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");

有了这个工具,你应该能够对这个特殊方法进行单元测试

如果你被测试一个方法吓坏了,把它分解成更小的方法,然后测试各个部分。如果你能得到一份,这将有助于我了解如何使用JUnit和测试方法,但当涉及到测试API或内部调用其他方法的方法时,我会感到困惑。我想是的,不要接受基于意见的问题…@syed你看过了吗?它允许模拟其他要控制其行为的对象和调用。这可能有助于你的处境。