Kinopyo Blog

プログラマとしてRuby, Rails, iPhone, iPad,Macなどなどと向き合う日々のログポース

Springによる単体テストの促進

2009年12月28日 by kinopyo | Spring


なぜDIコンテナを使うのかの勉強メモです。

SpringをはじめとするDIフレームワークでは、他クラスへの依存はインターフェイスを介したものになります。インターフェイスを介するため、呼び出す側はそのインターフェイスを実装しているクラスの完成を待つ必要がなくなります。DIコンテナを利用すればDIコンテナが設定ファイルの記述に従ってインターフェイスの実装クラスをセットします。そのため、設定ファイルの内容を切り替えることで単体テスト用のモックオブジェクト(ダミーオブジェクト)に切り替えることができます。

サンプル

JuchuImplクラスはZaikoHikiateImplクラスに依存しています。

そのためJuchuImpl単体のテストを行おうとしても、

ZaikoHikiateImplクラスのhikiate()メソッドにバグがある場合テストができませんでした。

単体テストを行いにくいクラス

public class JuchuImpl implements Juchu {

    public void juchu(Integer syohinCode, Integer suryo) {

        ZaikoHikiate hikiate = new ZaikoHikiateImpl();

        hikiate.hikiate(syohinCode, suryo);

        // 受注を処理 

    }

}
DIにより依存を低めたクラス

public class JuchuImpl implements Juchu {

    private ZaikoHikiate hikiate;

    public void setHikiate(ZaikoHikiate hikiate) {

        this.hikiate = hikiate;

    }

    public void juchu(Integer syohinCode, Integer suryo) {

        hikiate.hikiate(syohinCode, suryo);

        // 受注を処理

    }

}

JuchuクラスはZaikoHikiateImplクラスが完成していなくても

ZaikoHikiateインターフェイスを実装したモックオブジェクトを

DIコンテナにセットしてJuchuImplの単体テストを実行できます。

Tags: ,

You can leave a response, or trackback from your own site.

関連記事