小编wel*_*l_i的帖子

如何验证未抛出异常

在我使用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,然后我想写一些代码来解决这个问题.

我注意到的是测试总是通过,因为异常永远不会被测试方法抛出.

java mocking mockito powermock

16
推荐指数
2
解决办法
3万
查看次数

Mockito允许设置模拟的返回值

是否可以更改从模拟对象返回的值?

下面是一个解释我想要做的事情的例子.

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创建测试?

java mockito

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

java ×2

mockito ×2

mocking ×1

powermock ×1