使用 PowerMock 注入对象后,通过 EasyMock 模拟对象的方法调用

Mocking an Object's method calls by EasyMock after injecting it using PowerMock

我的项目中有一个关注者class,我正在尝试为其编写测试用例

Class A{
    a(){
        B b = new B();
        int ans = b.somefunction();
    }
}

我需要模拟上面 class 中的 somefunction() 调用以进行测试

我尝试按照以下方法实现此目的

@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class,B.class})
Class TestA{
    testa(){
        EasyMock mb = EasyMock.createMock(B.class);
        PowerMock.createMock(B.class);
        PowerMock.expectNew(B.class).andReturn(mb);
        EasyMock.expect(mb.somefunction()).andReturn(0);
        EasyMock.replay(mb);
        PowerMock.replay(B.class);
    }
}

但它总是给出 Java.lang.AssertionError: 意外的方法调用 B.somefunction()

我的包中有 PowerMock 1.5.5 和 EasyMock 3.2

谁能帮我解决上面的问题,帮我弄清楚我到底哪里出错了。我刚开始使用 EasyMock 和 PowerMock。

给定 class.

是否存在更简单的测试方法

您没有正确执行测试用例,不需要测试 class 中的构造函数

正确的做法是这样的:

@RunWith(PowerMockRunner.class)
@PrepareForTest({A.class,B.class})
class TestA{
    B mb=EasyMock.createNiceMock(B.class); 
    PowerMock.expectNew(B.class).andReturn(mb).anyTimes();
    EasyMock.expect(mb.somefunction()).andReturn(0).anyTimes();
    EasyMock.replay(mb);
    PowerMock.replayAll();

    A a=new A(); //calling A's Constructor so that test case actually runs
}

希望对您有所帮助!

祝你好运