JUnit测试提示Java
我需要使用JUnit测试以下代码。在我看来这很复杂,我甚至不知道从哪里开始 我知道这个方法在做什么,但我无法为它编写JUnit测试。在测试任何一段代码时,我们是遵循一种模式还是牢记一些关键点JUnit测试提示Java,java,Java,我需要使用JUnit测试以下代码。在我看来这很复杂,我甚至不知道从哪里开始 我知道这个方法在做什么,但我无法为它编写JUnit测试。在测试任何一段代码时,我们是遵循一种模式还是牢记一些关键点 protected WebResource.Builder applyHeaders(WebResource service, List<? extends BaseClientHeader<?>> headers, List<HttpRequestClientHeader&g
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你看过了吗?它允许模拟其他要控制其行为的对象和调用。这可能有助于你的处境。