gpt4 book ai didi

java - 理解模拟/ stub -mockito

转载 作者:行者123 更新时间:2023-12-01 18:39:18 25 4
gpt4 key购买 nike

我对模拟/ stub 有非常基本的了解。

当您在测试代码中创建 stub 时,例如:

test h = mock(test);
when(h.hello()).thenReturn(10);

在源逻辑中我有这样的代码:

test src = new test();
src.hello();

现在,由于我已经 stub 了 hello 方法,所以 stub 会被调用吗?或者由于实例不同,它不会被 stub 吗?有什么方法可以 stub 类的所有实例吗?

最佳答案

您需要使用工厂模式并将模拟工厂注入(inject)到创建实例的类中。

因此,如果您想为某个类 Foo 编写测试,该类需要在其代码中的某个位置创建 Bar 的实例,则需要注入(inject)一个 BarFactoryFoo 中。注入(inject)可以通过将 BarFactory 传递到构造函数或 set 方法中的老式方式进行,或者使用像 Guice 这样的依赖注入(inject)框架。老式方式的简单示例:

class Foo {

private final BarFactory mFactory;

public Foo(BarFactory factory) {
mFactory = factory;
}

public void someMethodThatNeedsABar() {
Bar bar = mFactory.create();
}

}

现在,在您的测试类中,您可以注入(inject)一个模拟的 BarFactory,它可以生成 Bar 的模拟实例:

Bar mockBar = mock(Bar.class);
BarFactory mockFactory = mock(BarFactory.class);
when(mockFactory.create()).thenReturn(mockBar);
Foo objectForTest = new Foo(mockFactory);

关于java - 理解模拟/ stub -mockito,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20581105/

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