【发布时间】:2019-12-24 17:02:18
【问题描述】:
我正在使用 Mockit。我有一种情况,方法抛出异常,捕获异常并记录异常(并且不重新抛出)。
Class Test {
public void abc() {
try {
xyz();
} catch (Exception e) {
LOGGER.error("Exception thrown {} ", e);
}
}
private void xyz() {
// Can throw exception
// which goes to the
// callee
}
}
现在,对于某些情况,xyz() 可能会抛出异常,并且会在 abc() 中捕获。我想测试的正是这种情况。我不能使用@Test(Expected=SomeException.class),因为正在捕获和记录异常。但是,我的测试用例应该看看是否抛出了这个异常。
我确实在网上搜索过,但没有找到任何相关内容。
任何关于如何接近的指针都会有所帮助。
我提到了this SO question,看起来很相似,但不是我要找的。p>
【问题讨论】:
-
注入一个模拟记录器,并验证模拟记录器是否已被调用:据我们所知,这是此类异常的唯一可见效果。
-
@JBNizet:请您详细说明一下。我在使用 Mockito 方面处于基本水平。
-
类似
Logger mockLogger = mock(Logger.class); Test test = new Test(mockLogger); test.abc(); verify(mockLogger).error(any(), any());。 -
您必须重构代码以使其可测试。例如,通过将私有方法提取到一个单独的类中,注入到您拥有的类中,然后对该提取的方法进行单元测试。或者通过注入记录器而不是使用私有静态记录器。
-
我个人对此的看法是,我必须使用 Powermock,然后这是我需要重构代码的标志。所以我从不使用 Powermock。
标签: java junit mockito tdd bdd