Spring 验证是否在方法内调用了方法,而不在该方法内调用其他方法
我需要验证是否至少调用了一次connClient.query(arg1,arg2)。因此,在测试用例文件中,我调用方法abc()Spring 验证是否在方法内调用了方法,而不在该方法内调用其他方法,spring,spring-boot,junit,mockito,spring-test,Spring,Spring Boot,Junit,Mockito,Spring Test,我需要验证是否至少调用了一次connClient.query(arg1,arg2)。因此,在测试用例文件中,我调用方法abc() public class ServiceClass { @Autowired ConnClient connClient; public void abc() { result = connClient.query(arg1, arg2); // verify called once. allDocsRetu
public class ServiceClass {
@Autowired
ConnClient connClient;
public void abc() {
result = connClient.query(arg1, arg2); // verify called once.
allDocsReturned = result.getResults(); // throws NPE
}
}
我得到了NullPointerException,因为上面作为result调用的行result.getResults()为null,并且测试用例失败。
请提供帮助。您需要模拟调用
connClient.query
和ResultSet
:
@InjectMocks
ServiceClass serviceClass;
@Mock
ConnClient connClient;
@Test
public void testABC() {
serviceClass.abc();
verify(connClient, times(1)).query(arg1,arg2);
}
您的类
ConnClient
是一个mock,这就是调用ConnClient.query(arg1,arg2)
将返回空ad的原因,因此在取消引用结果时会抛出NPE
在这种情况下,您可以指定方法调用的返回值,即
@InjectMocks
ServiceClass serviceClass;
@Mock
ConnClient connClient;
@Test
public void testABC() {
ResultSet rs = mock(ResultSet.class);
when(rs.getResults()).thenReturn(//here return the object of type of your variable allDocsReturned);
when(connClient.query(arg1,arg2)).thenReturn(rs);
serviceClass.abc();
verify(connClient, times(1)).query(arg1,arg2);
}
其中,someObject
被允许是一个模拟对象(或者,您可以返回一个具体的值)
完成此操作后,result
将不再为空,并且不会抛出任何NPE
请注意,如果以后取消引用了result
,则还必须模拟getResults()
调用
编辑:
现在结果将不会为空,但是,AllDocsReturn仍将为空,但不会导致NPE显示您发布的代码我尝试了这个。结果仍然为空。你能举个小例子吗?doReturn(result).when(connClient.query)(arg1,arg2);此结果未在serviceClass.abc()调用中执行/注入,我正在获取NPE。请提供TestClass的标头。为了充分了解您是如何初始化和运行测试的。通常是某种
@RunWith
。谢谢。但是调用serviceClass.abc()会使结果变量为null。@Mock result;当(connClient.query(arg1,arg2)),然后返回(结果);当(result.getResults())。然后返回(“xyz”);serviceClass.abc()//给出NPEMockito.when,它可以正常工作并模拟事物。但当我调用serviceClass.abc()时,该行生成的NPE结果变为null。mock when(connClient.query(arg1,arg2)).thenReturn(result)未在serviceClass.abc()调用中执行/注入。您可以尝试when(connClient.query(arg1,arg2)).thenReturn(any(ResultSet.class));org.mockito.exceptions.misusing.InvalidUseOfMatchersException:参数匹配器的使用无效!需要0个匹配器,记录了1个
doReturn(someObject).when(connClient).query(arg1,arg2);
@InjectMocks
ServiceClass serviceClass;
@Mock
ConnClient connClient;
@Mock
Result result;
@Test
public void testABC() {
doReturn(result).when(connClient).query(arg1,arg2);
serviceClass.abc();
verify(connClient, times(1)).query(arg1,arg2);
}