【发布时间】:2016-05-18 09:12:08
【问题描述】:
在我的 TestNG 单元测试中,我有一个场景,我想测试抛出异常,但我也想测试在模拟子组件上没有调用某些方法。我想出了这个,但这很丑,很长而且可读性不好:
@Test
public void testExceptionAndNoInteractionWithMethod() throws Exception {
when(subComponentMock.failingMethod()).thenThrow(RuntimeException.class);
try {
tested.someMethod(); //may call subComponentMock.methodThatShouldNotBeCalledWhenExceptionOccurs
} catch (RuntimeException e) {
verify(subComponentMock, never()).methodThatShouldNotBeCalledWhenExceptionOccurs(any());
return;
}
fail("Expected exception was not thrown");
}
有没有更好的解决方案来测试 Exception 和 verify() 方法?
【问题讨论】:
-
如果您使用 TestNG,那么对于预期的异常,您应该使用
@Test注释的expectedExceptions属性而不是使用try catch块。 -
但在那种情况下我无法使用 verify(),因为测试代码永远不会到达那里
-
@kordirko 感谢您的链接,但唯一可用的答案包含限制“仅支持高达 1.10.8 的 Mockito”。但是我会给它机会,即使我的 Mockito 版本是 1.10.19
-
@Michal 如果我是你,我会将这两个问题分开。首先,我将使用
expectedExpections属性检查是否引发了异常。然后是否从未调用过方法的第二个方面,我将使用@Test(dependsOnMethods = "testExceptionAndNoInteractionWithMethod")对第一个定义的依赖项进行单独的测试(您可能希望将此依赖项方法重命名为testExpection之类的名称)。我看到您将subComponentMock存储为测试类属性,所以这对您来说根本不是问题。
标签: java unit-testing mockito testng