模拟实例方法



也许我错过了一些东西,有人可以告诉我为什么这个单元测试用例不起作用吗?

谢谢。

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 类实例。所以你的模拟在这里不会有效。

相关内容

  • 没有找到相关文章

最新更新