EasyMock问题,在实例上调用方法但对如何获取此实例不感兴趣

时间:2010-07-15 09:19:23

标签: java easymock

我正在尝试使用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代理。

任何可以帮助我的人?​​

3 个答案:

答案 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);