模拟方法以避免抛出异常。

3

我有一个在特定情况下会抛出异常的方法。我想编写一个测试用例来检查当异常未被抛出时的行为。我在文档或示例中找不到这个内容,请帮忙。

E.g.:

when(validator.validate(any(ValidationData.class))).thenThrow(new ValidationException());

但我想测试一下是否根本没有抛出异常:

class Validator {
    void validate(ValidationData dataToValidate) throws Exception {
    }
}

我需要类似以下内容的东西:
when(doSomething()).thenNotThrowException

或者

when(doSomething()).thenDoNothing

1
如果验证器对象被模拟,则您不需要做任何操作;如果您希望validate方法抛出异常,则只需使用when-thenThrow。 - undefined
3个回答

6

默认情况下,Mockito的mock对于void方法不执行任何操作,因此您无需编写任何内容。

如果您想显式执行此操作,请尝试以下操作:

doNothing().when( validator ).validate( any() );


我应该使用模拟对象、间谍对象还是存根对象? - undefined
这个语句接受Mockito的mocks和spies,我不知道stubs。 - undefined

0

为了测试没有抛出异常的情况,实际上你需要做得更少:

  • 根本不要编写thenThrow
  • 在你的测试用例中,期望测试方法正常运行并且没有异常(在Junit中,@Test不要有任何expected属性)

如果测试没有错误地执行,那么你的测试通过了。


0
如果你只想测试一个测试函数中是否有异常,你应该使用这个注解:@Test(expected = Test.None.class) 例子:
@Test(expected = Test.None.class)
public void testFunction() {
    // some code
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接