gpt4 book ai didi

java - 使用 Mockito 创建新类的实例时如何模拟异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:59:20 24 4
gpt4 key购买 nike

在一个方法中,我捕获了一个我想模拟的异常。

我知道如何使用 mock.doSomething() 模拟对象以抛出异常,但我需要在类创建自身的新实例时抛出远程异常。

transient Bicycle bike = null;

public Bicycle getBicycle() {
if (bike == null) {
try {
bike = new Bicycle(this);
} catch (RemoteException ex) {
System.out.println("No bikes found");
}
}
return bike;
}

我希望能够模拟 try block 中的所有内容,但我不明白您如何模拟新类的创建,具体如下行:

bike = new Bicycle(this);

我尝试过很多不同的 Mockito 测试,例如:

Bicycle b = mock(Bicycle.class);
Mockito.doThrow(new RemoteException()).when(b = new Bicycle());

虽然我知道这会而且行不通,但我想做类似的事情。

我已经阅读了 Mockito 文档,但没有发现任何有用的东西:

http://site.mockito.org/mockito/docs/current/org/mockito/Mockito.html

最佳答案

您通常不会模拟构造函数。您可以使用 PowerMock 等工具,但我通常建议您不要这样做。

目前,如果您想控制构造新的 Bicycle 时发生的情况,您的代码实际上不可测试。构造一个 Bicycle 实际上是一个复杂的操作吗?也许你想要一个 BicycleFactory,它可以作为依赖项传递到你的类中,例如 - then 你可以模拟 BicycleFactory.createBicycle 或其他任何东西你称之为。

构造函数就像静态方法——当您使用它们时,您将与您正在调用的特定代码紧密绑定(bind);如果没有像 PowerMock 这样的方法,就没有干净的方法来注入(inject)其他行为。

关于java - 使用 Mockito 创建新类的实例时如何模拟异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com