也许我错过了一些东西,有人可以告诉我为什么这个单元测试用例不起作用吗?
谢谢。
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
实例化自己的B
实例,因此永远不会使用您的模拟实例。相反,您可以重构 A
的构造函数,以采用B
对象的工厂或它将在内部使用的B
实例。
若要执行最初描述的操作,可以使用 PowerMock 完全替换该方法。
@PrepareForTest(B.class)
@RunWith(PowerMockRunner.class)
public class MyTests {
@Test
public void myTest {
// Make B.methodB always return 20
PowerMock.stub(PowerMock.method(B.class, "methodB")).toReturn(20);
}
}
您可以在
注射豆子时使用 mock。在这里,您将手动创建一个 B 类实例。所以你的模拟在这里不会有效。