【问题标题】:mock method to do not throw an exception模拟方法不抛出异常
【发布时间】:2023-03-25 17:35:01
【问题描述】:

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

例如:

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

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

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

例如我需要类似的东西:

when(doSomething()).thenNotThrowException

when(doSomething()).thenDoNothing

【问题讨论】:

  • 如果验证器对象被模拟然后你不需要任何东西,如果你想验证方法抛出异常那么只使用when-thenThrow

标签: java exception mocking mockito


【解决方案1】:

默认情况下,Mockito 的 mock 对 void 方法什么都不做,所以你不需要写任何东西。

如果你想明确地这样做,试试这个:

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

【讨论】:

  • 我应该使用 mock、spy、stub 吗?
  • 这样的声明接受了 Mockito 的嘲笑和间谍,我不知道存根。
【解决方案2】:

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

  • 不要不要thenThrow进行编程
  • 在您的测试用例中,期望测试方法正常运行并无异常完成(在 Junit 中,@Test 没有任何 expected 属性)

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

【讨论】:

    【解决方案3】:

    如果你只是想测试一个测试函数中没有异常,你应该使用这个注解:@Test(expected = Test.None.class)

    例子:

    @Test(expected = Test.None.class)
    public void testFunction() {
        // some code
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2017-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多