我正在尝试使用Easymock测试算法,但我绊倒了这个算法实现的细节。谁能为我提供出路?给我一个问题的部分是:
interface A {
B getB ();
}
interface B {
void setX (int x);
void doSomething ();
}
现在在测试算法的某个地方发生了这种情况:
a.getB ().setX (9);
a.getB ().doSomething ();
a.getB ().setX (16);
这会导致意外的方法调用getB(),因为我的测试只声明了有趣的部分:
B b = EasyMock.createStrictControl ();
b.setX (9);
EasyMock.expectLastCall();
b.doSomething ();
EasyMock.expectLastCall();
我理解这是因为订单已经过检查。但即使我放置以下行也没有任何变化。
EasyMock.expect (a.getB ()).andReturn (b).anyTimes ();
实例a也是EasyMock代理。
任何可以帮助我的人?
答案 0 :(得分:1)
根据您的最后一段代码使用anyTimes()
,但不要使用严格的模拟 - 这是强制执行排序的严格性。
不可否认,我不记得EasyMock如何在控件之间处理的细节,但听起来你真的不会对订购感到困扰。
答案 1 :(得分:0)
显然andStubReturn (b)
可以解决问题。
答案 2 :(得分:0)
以下对我来说很好。我正在使用严格的模拟,但我对createStrictControl()
方法没有任何经验。
B b = EasyMock.createStrictMock(B.class);
A a = EasyMock.createStrictMock(A.class);
expect(a.getB()).andReturn(b).anyTimes();
b.setX(9);
b.doSomething();
b.setX(16);
replay(a);
replay(b);
a.getB().setX(9);
a.getB().doSomething();
a.getB().setX(16);
verify(b);
verify(a);