java - 如何验证是否捕获到异常

标签 java junit mockito

如何使用 Mockito 测试是否捕获到异常?

示例:

try{
     int a = 8/0;
catch(ArithmeticException e){
    Logger.error(e.getMessage());
}

最佳答案

我猜你的问题是 Logger.error() 实际上是对静态方法的调用。而“正常”的 Mokito 不允许您模拟对静态方法的调用。

因此,有两种选择:

a) 您可以求助于 PowerMokito ...,它使您能够模拟此类调用;因此你可以简单地指定:“我希望 Logger.error() 应该用这种异常对象来调用”。但请注意:PowerMockito 及其兄弟 PowerMock 需要付出一定的代价;对于许多人来说,他们制造的问题多于他们解决的问题。因此,就我个人而言,我绝对不推荐此选项。

b) 你可以退后一步,将你的设计更改为不使用静态方法,例如:

class UnderTest {
   SomeLogger logger ... coming into the class via dependency injection

   void foo() {
      try { ... whatever  
      } catch(WhateverException w) {
        logger.error(w....

所以,现在您正在处理一个方法调用;你可以创建一个模拟并传递它。

当然,这只有在您拥有日志记录代码时才有效。当然,这可能需要大量工作。但从长远来看,它会得到返回。

最后的建议:你可能想看那些 videos ,详细解释了“编写可测试代码”的实际含义。

关于java - 如何验证是否捕获到异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482330/

相关文章:

java - 模拟 jooq 选择请求

java - 模拟对象返回具有相同参数的真实对象

spring-boot - 如何使用 Mockito 模拟 context.getBeansWithAnnotations

java - 覆盖泛型方法

java - 无法让 notificationAll 按预期工作

java - 使用 javax.measure 将平方米换算为平方公里

java - 基于 JUnit 类别执行并行测试

java - 当我尝试用 java 自动登录 facebook 时,内部服务器错误 500

java - mockito 是否应该调用模拟类的默认构造函数?

java - 为任何测试运行仅运行一次 JUnit setup 和 teardown