在我使用Mockito的单元测试中,我想验证NullPointerException没有被抛出.
public void testNPENotThrown{
Calling calling= Mock(Calling.class);
testClass.setInner(calling);
testClass.setThrow(true);
testClass.testMethod();
verify(calling, never()).method();
}
Run Code Online (Sandbox Code Playgroud)
我的测试设置了testClass,设置Calling对象和属性,以便该方法将抛出一个NullPointerException.
我验证从不调用Calling.method().
public void testMethod(){
if(throw) {
throw new NullPointerException();
}
calling.method();
}
Run Code Online (Sandbox Code Playgroud)
我想要一个失败的测试,因为它抛出一个NullPointerException,然后我想写一些代码来解决这个问题.
我注意到的是测试总是通过,因为异常永远不会被测试方法抛出.
是否可以更改从模拟对象返回的值?
下面是一个解释我想要做的事情的例子.
public class MyClass{
public void method(Mock obj){
if(obj.getValue.equals("value"){
obj.setValue("changedValue");
}
anotherObj.call(obj.getValue());
}
Run Code Online (Sandbox Code Playgroud)
所以上面的课程非常简单.如果传入的值等于value,它将更改返回的值.
@Test
public void test(){
Mock obj = mock(Mock.class);
when(obj.getValue()).thenReturn("value");
testClass.method(obj);
verify(anotherObj, times(1)).call("changedValue");
}
Run Code Online (Sandbox Code Playgroud)
测试想要验证是否使用更改的值调用anotherObj.call,但由于我们已将返回值模拟为"value",因此将返回"value"时失败.
是否可以使用模拟的returnValue创建测试?