Junit测试无效响应方法

时间:2019-05-31 10:41:31

标签: java junit mockito

我有一个void方法,即invokeEllaAsync,我想在Spring生态系统中对其进行测试,下面提供了该方法。该方法还从内部调用另一个void方法作为嵌套调用。

下面提供了模拟信息,

invokeEllaAsync

我尝试如下测试 @Test public void testInvokeEllaShowsSuccess() { ServiceResponse<EllaResponseDto> validServiceResponseMock = mock( ServiceResponse.class ); when( connectorMock.call( any(), (HttpHeaders) any() ) ).thenReturn( validServiceResponseMock ); when( validServiceResponseMock.isSuccess() ).thenReturn( true ); ellaService.invokeEllaAsync( validIrisBo ); verify( ellaService, times( 1 ) ).invokeEllaAsync( validIrisBo ); } 方法,

org.mockito.exceptions.misusing.NotAMockException: 
Argument passed to verify() is of type EllaService and is not a mock!
Make sure you place the parenthesis correctly!
See the examples of correct verifications:
    verify(mock).someMethod();
    verify(mock, times(10)).someMethod();
    verify(mock, atLeastOnce()).someMethod();

我收到下面提供的错误

ellaService

如果我理解正确,则@InjectMocks@Mock的类型,而不是<-。因此,不执行测试。

如何正确编写测试?

2 个答案:

答案 0 :(得分:0)

问题是您只能验证模拟的组件(用@ Mock注释)。 EllaService不是moc,而是代码中真实类的实例。 @ InjectMock注释仅使用模拟设置EllaService的私有字段。

通常,在测试void方法时,需要确保使用预期的参数调用了某些模拟组件,因此,您需要验证的不是ellaService调用,而是调用invokeInlaAsync方法中使用的模拟组件的调用。

答案 1 :(得分:0)

阅读答案后,我将此测试添加到了代码库中。

@Test
public void testInvokeEllaAsyncSuccessfullyCallsCallEllaService() {

    ellaService.invokeEllaAsync( validIrisBo );

    PowerMockito.verifyStatic( EllaDtoConverter.class, VerificationModeFactory.times( 1 ) );
    EllaDtoConverter.convertToRequest( validIrisBo );

    verify( connectorMock, times( 1 ) ).call( any(), (HttpHeaders) any() );
}