1

TopHandler、 、 の3 つのタイプがあるHandlerAとしHandlerBます。それぞれにvoid handle(Something)方法があります。

のインスタンスは と のインスタンスへのTopHandler参照を保持し、とを呼び出します。HandlerAHandlerBhandle()HandlerAHandlerB

私のテストでは、3 つのオブジェクトすべてをモックしてから、topHandler での呼び出しが他の 2 つのオブジェクトでの呼び出しを引き起こすことを確認します。

それを指定するにはどうすればよいですか?EasyMock を使用すると、モックの予想される動作を指定できることはわかっていますが、ここでどの機能を使用すればよいかは明確ではありませんでした。

4

2 に答える 2

3

OPの説明によると、モックされる主なインターフェースはHandlerインターフェースです:

public interface Handler {
    void handle(String o);
}

3 つのモック オブジェクトはすべてこのインターフェイスを実装し、TopHandler クラスはテスト対象のクラスです。

public static class TopHandler implements Handler {
    private Handler a;
    private Handler b;
    public TopHandler(Handler a, Handler b) {
        this.a = a; this.b = b;
    }
    public void handle(String o) {
        a.handle(o);
        b.handle(o);
    }
}

TopHandlerテスト ケースでは、実装が実際handle()に a と b のメソッドを呼び出すことを確認する必要があります。

@Test
public void testTopHandler() throws Exception {
    Handler mockA = EasyMock.createMock(Handler.class);
    mockA.handle("Test");
    EasyMock.expectLastCall().once();

    Handler mockB = EasyMock.createMock(Handler.class);
    mockB.handle("Test");
    EasyMock.expectLastCall().once();

    TopHandler handler = new TopHandler(mockA, mockB);
    EasyMock.replay(mockA, mockB);
    handler.handle("Test");
    EasyMock.verify(mockA, mockB);
}
于 2011-01-15T14:04:39.727 に答える
2

TopHandler は、実際にテストしているクラスのように見えるため、モックしたくありません。テスト ケースで、他の 2 つを通常どおりモックし、それらが呼び出されたことを確認します。すべてのクラスをモックする場合、テストするものは何もありません。

TopHandler を呼び出す別のクラスが実際にテストされている場合、他の呼び出しは TopHandler のみのテストであるため、これがテスト ケースで呼び出されていることを確認するだけで済みます。

于 2011-01-15T00:09:02.080 に答える