我有一个SpringBoot测试,它Assert测试方法在某些情况下会抛出一个异常。然而,测试方法捕获并分组多个错误,记录细节,并(重新)只抛出一个“ServiceException”。
(* 记录并重新引发完全相同的异常将是反模式,但不是这种情况 *)
这是一个服务方法,做了很多事情,用户/客户端不应该被所有的细节所困扰。大多数问题都是无关紧要的,除了“稍后再试”之外没有什么可做的。
测试工作正常(抛出异常时通过),但我也看到了原始的stacktrace日志(在生产中应该是这样)。然而,在进行测试时,不希望看到这个错误显示在日志中,好像它是一个真实的的错误一样。(尽管可能是测试做得不好的情况)
所以问题是,我怎样才能抑制只为这一个测试用例记录错误呢?(防止所有测试都记录错误并不是一个解决方案。只有特定的测试用例才需要异常)
测试方法示例:
public boolean isThisParameterGoodToUse(Object parameter) throws ServiceException {
try {
boolean allWasOk = true;
// Do stuff that may throw exceptions regardless of the parameter
return allWasOk;
} catch (IOException | HttpException | SomeException | YetAnotherException e) {
String msg = "There was a problem you can do nothing about, except maybe 'try again later'.";
this.log.error(msg, e); // Relevent for system monitors, nothing for the client
throw new ServiceException(msg);
}
}
然后测试看起来会像这样(类被注解为'@SpringBootTest'并且它使用'Jupiter-api'):
@Test
public void isThisParameterGoodToUse() {
assertThrows(ServiceException.class,
() -> this.injectedService.isThisParameterGoodToUse("This is not a good parameter at all!"));
}
当我运行测试时,我会收到要记录的错误消息,例如:
com.myProd.services.SomeException: Well ain't that some! Check if you have the power cord plugged in.
at ... <lots of stackTrace> ...
2条答案
按热度按时间aiqt4smr1#
如果应该为单个测试类取消日志记录,则可以使用
如果在所有测试中都应禁止记录日志,请将其添加到application.properties
更新
通过将测试嵌套在单独的类中,可以取消单个测试的日志记录
dsf9zpds2#
不要在日志中隐藏异常,即使是在测试中。
在测试中看到抛出的异常是一件好事,因为这意味着您的测试涵盖了抛出异常的情况。
最需要做的事情是验证异常沿着正确的消息是否也被正确地抛出(因为您不想模拟日志记录器或监视它或任何事情)。