【发布时间】:2019-06-14 17:19:36
【问题描述】:
也许我遗漏了什么,谁能告诉我为什么这个单元测试用例不起作用?
谢谢。
import java.util.Random;
public class A {
private B b;
public A() {
b = new B();
}
public int methodA() {
return b.methodB();
}
}
// 只返回一个随机数
class B {
public int methodB() {
return new Random().nextInt();
}
}
// 这是我的测试方法,它不打印 20
@Test
public void testMethodA() {
B b = Mockito.mock(B.class);
Mockito.when(b.methodB()).thenReturn(20);
A a = new A();
System.out.println(a.methodA());
}
【问题讨论】:
-
模拟没有被插入
A,所以A在你调用它的构造函数时仍然实例化一个新的B。一种常见的方法是将已经创建的B传递给A的构造函数。所以在你创建你的模拟之后,你可以做A a = new A(b); -
我总是很惊讶有多少人只是开始使用模拟框架......没有先学习一个好的教程。这些事情是复杂的。不要假设您可以预期如何做事。任何好的教程都会仔细地向你解释,仅仅创建一个模拟对象并不会神奇地将模拟对象推入其他对象......