使用 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
}
希望对您有所帮助!
祝你好运
我的项目中有一个关注者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
}
希望对您有所帮助!
祝你好运