【问题标题】:Mocking an Object's method calls by EasyMock after injecting it using PowerMock使用 PowerMock 注入对象后,通过 EasyMock 模拟对象的方法调用
【发布时间】:2015-03-01 08:31:48
【问题描述】:

我的项目中有以下课程,我正在尝试为其编写测试用例

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: Unexpected method call B.somefunction()

我的包中有 PowerMock 1.5.5 和 EasyMock 3.2

有人可以帮我解决上述问题并帮助我找出我到底哪里出错了。我是使用 EasyMock 和 PowerMock 的新手。

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

【问题讨论】:

    标签: java unit-testing testing powermock easymock


    【解决方案1】:

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

    正确的方法是这样做:

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

    希望这会有所帮助!

    祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多