0

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プロキシです。

私を助けることができる人はいますか?

4

3 に答える 3

1

コードの最後のビットに従って使用anyTimes()しますが、厳密なモックは使用しないでください。順序付けを強制するのは厳密さです。

確かに、EasyMockがコントロール間の順序付けをどのように処理するかについての詳細は思い出せませんが、実際には順序付けについて気になっていないようです。

于 2010-07-15T09:21:39.800 に答える
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);
于 2010-07-15T15:15:13.017 に答える
0

どうやらandStubReturn (b)トリックを行います。

于 2010-07-15T09:33:40.617 に答える