今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

モッククラスの寿命って・・・ via アガテナ

satoshis2004-10-25

インターフェイスにメソッドを追加すると、モッククラスにもメソッドを追加したりと、同期が面倒になってきます。
実装クラスに置き換えてしばらくしたら、モッククラスを物理的に削除しちゃっているんですけど、他のモッカーのみなさんはどうしているのかなぁ?教えてくださいな。

どうやったかは覚えてないけど、インタフェースに対するモックオブジェクトと実際のシステムで使う実装クラスは別々にテストを書いたように思う。
わけわからんことを書いていたので、全面的に書き直し。(^^;
掘り出してみたら、モックオブジェクトを使ったテストと、実際の実装クラスを使ったテストを分けていた。
まず、モックオブジェクト用にインタフェースを作成。

public interface Generic {
    public void someMeshod();
}

で、Genericを使うクラスのテストを作る。ここでモックオブジェクトを使用する。

public class GenericClientTest {
    private GenericClient genericClient;

    public void testSomeMethod() {
        genericClient.setGeneric(new MockGeneric());
        genericClient.someMethodDelegate();
        // assert
    }

    protected void setUp() {
        genericClient = new GenericClient();
    }
}

モックオブジェクトを作成。

public class MockGeneric implements Generic {
    public void someMethod() {
    }
}

モックでのテストをパスしたら、Genericの実装クラスのテストを作る。

public class GenericClientTest {
    private GenericClient genericClient;

    // テストメソッドの名前を変更
    public void testSomeMethodByMock() {
        genericClient.setGeneric(new MockGeneric());
        genericClient.someMethodDelegate();
        // assert
    }

    public void testSomeMethod() {
        genericClient.setGeneric(new RealGeneric());
        genericClient.someMethodDelegate();
        // assert
    }

    protected void setUp() {
        genericClient = new GenericClient();
    }
}

実装クラスを作成。

public class RealGeneric implements Generic {
    public void someMethod() {
    }
}

モックオブジェクトを利用したテストはそのまま残しておいて、実装クラスを利用したテストを追加していた。Genericインタフェースにメソッドを追加したケースは見つけた部分ではなかったけど、もしインタフェースに追加したなら、たぶんモックオブジェクトにもコンパイルを通すために追加する。テストは作らないだろうけど。