繁体   English   中英

在使用PowerMock注入后,模拟一个Object的方法调用EasyMock

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

我在我的项目中有一个以下类,我正在尝试编写一个测试用例

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

我需要在上面的类中为我的测试模拟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的新手。

是否存在测试给定类的更简单方法。

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

正确的方法是这样做:

@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
}

希望这可以帮助!

祝好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM