【问题标题】:How to force Mockito to throw RemoteException in JUnit test如何强制 Mockito 在 JUnit 测试中抛出 RemoteException
【发布时间】:2013-03-23 01:33:49
【问题描述】:

这是我想强制抛出远程异常的代码:

transient Bicycle b=null;

public Bicycle getBicycle() {
    if(b==null) {
        try {
            b=new Bicycle(this);
        } catch (RemoteException ex) {
            Logger.getLogger(Bicycle()).log(Level.SEVERE, null, ex);
        }
    }
    return b;
}

这是我使用 Mockito 运行的 JUnit 测试:

boolean exceptionThrown=false;
Bicycle mockB = mock(Bicycle);
mockB.setBicycle(null);
stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});

assertTrue(exceptionThrown);

我不断收到以下错误:

Checked exception is invalid for this method!

我们将不胜感激。

编辑:

代替

stub(mockB.getBicycle()).toThrow(new RemoteException(){boolean exceptionThrown = true;});

我也试过

doThrow(new RemoteException(){boolean exceptionThrown = true;}).when(mockB).getBicycle();

Mockito.when(mockB.getBicycle()).thenThrow(new RemoteException(){boolean exceptionThrown=true;});

还是没有运气。

Edit2 - 在完全理解 API 并正确使用之后更进一步:

when(mockB.getBicycle()).thenThrow(new RuntimeException());

我现在不知道如何进行断言。一旦异常被调用,我尝试放置一个布尔值,但断言看不到布尔值。

有什么想法吗?

【问题讨论】:

  • Bicycle 的构造函数是否声明它抛出 RemoteException
  • 不,我想我现在明白我的问题了,我有一个稍微不同的问题,我不知道如何让我的断言正确。我将进行编辑。

标签: java junit mockito remoteexception


【解决方案1】:

getBicycle() 方法永远不会返回 RuntimeException。代码本身正在捕获 RuntimeException,并在捕获时写入记录器。该方法本身将返回 Bicycle 或 null。

您需要重新考虑您希望 getBicycle 方法如何运行。如果您希望 RuntimeException 冒泡,它可以重新抛出 RuntimeException atfer logging。但是,根据它的编写方式,RuntmeException 永远不会出现在 JUnit 测试中

【讨论】:

  • 非常感谢,解释了很多。是否有可能我可以测试 Logger 是否被记录?
  • 是的,但您仍然需要重构代码。如果你让 Logger 成为一个带有 setter 和 getter 的实例变量。如果它不存在,getter 可以创建记录器。二传手只会分配它。然后,测试可以提供一个模拟的 Logger,它将在运行之前分配给代码。然后测试可以检查 Logger。
  • 太棒了,那我还是好好学习吧!昨天才学会如何进行 JUnit 测试,这对我来说太陌生了,感谢您的耐心等待。
  • 这是一个值得的事业。一旦你开始编写测试,你就会开始以不同的方式编写代码。您不仅开始考虑代码的工作方式,还开始考虑如何对其进行测试。我个人发现这是非常有益的。坚持下去。
  • 永远不要记录异常并重新抛出它。它只会增加日志中的堆栈跟踪。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-01
相关资源
最近更新 更多