3

EasyMock と TestNG を使用していくつかの単体テストを作成しようとしていますが、質問がありました。以下を考えると:

void execute(Foo f) {
  Bar b = new Bar()
  b.setId(123);
  f.setBar(b);
}

バーの Id が次のように設定されることをテストしようとしています。

@Test
void test_execute() {
  Foo f = EasyMock.createMock(Foo.class);

  execute(f);

  Bar b = ?; // not sure what to do here
  f.setBar(b);
  f.expectLastCall();
}

私のテストでは、モック オブジェクトであるf.getBar()ため、ID を呼び出して検査することはできません。f何かご意見は?andDelegateTo()これは、EasyMock v2.5 の追加とを確認したい場所andStubDelegateTo()ですか?

ああ、記録のために... EasyMockのドキュメンテーションは吹き飛ばされます。

4

4 に答える 4

9

あはは!キャプチャーがメインです。

@Test
void test_execute() {
  Foo f = EasyMock.createMock(Foo.class);

  Capture<Bar> capture = new Capture<Bar>();
  f.setBar(EasyMock.and(EasyMock.isA(Bar.class), EasyMock.capture(capture)));
  execute(f);

  Bar b = capture.getValue();  // same instance as that set inside execute()
  Assert.assertEquals(b.getId(), ???);
}
于 2010-05-06T17:37:31.753 に答える
1

これを試しましたか? `

final Bar bar = new Bar(); 
bar.setId(123);
EasyMock.expect(f.getBar()).andAnswer(new IAnswer<Bar>() {
     public Bar answer() {             
         return bar;
     }
});

頭の上の構文はわかりませんが、これでうまくいくはずです。

于 2010-05-07T07:27:21.783 に答える
0
f.setBar(EasyMock.isA(Bar.class))

これにより、Bar クラスをパラメータとして setBar が呼び出されます。

于 2010-05-06T17:07:16.170 に答える
0

私は、equal返されることを期待するオブジェクトにオブジェクトを構築します。この場合、 を作成し、new Barその ID を 123 に設定します。これは、 と の正しい実装と、equals()EasyMocks引数マッチャーのデフォルトの動作 (パラメーターの等価比較を使用) に依存します。hashCode()Bar

@Test
public void test_execute() {
    Foo f = EasyMock.createMock(Foo.class);
    Bar expected = new Bar();
    expected.setId(123);
    f.setBar(expected);
    EasyMock.expectLastCall();
    EasyMock.replay(f);

    execute(f);

    EasyMock.verify(f);
}
于 2010-05-06T17:56:50.547 に答える