我有一个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
的类型,而不是<-
。因此,不执行测试。
如何正确编写测试?
答案 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() );
}