TOPシステム開発> Java/DIのモックオブジェクト
徹底比較!!Ruby on Rails vs Javaフレームワーク
徹底比較!!Ruby on Rails vs Javaフレームワーク

第4回:DIコンテナとの比較

著者:アスタリクス  大西 正太   2006/9/20
前のページ  1  2  3  4  次のページ
Java/DIのモックオブジェクト

   JavaではDIコンテナを用いることでオブジェクトのモック化が可能になります。具体的にはDIコンテナの定義ファイルをテスト用と本番用の各々に準備します。

   リスト1〜リスト7がSpring Frameworkを用いた場合のサンプルです。
リスト1:モック/本番クラス呼び出し側クラスのSpring定義ファイル
<beans>
   <bean id="authService" class="AuthService" >
      <property name="cardAuth" >
         <ref bean="creditCardAuth" />
      </property>
   </bean>
</beans>

リスト2:モッククラスが記述されたSpring定義ファイル
<beans>
   <bean id="creditCardAuth" class="CreditCardAuthMock" />
</beans>

リスト3:本番用クラスが記述されたSpring定義ファイル
<beans>
   <bean id="creditCardAuth" class="CreditCardAuthImpl" />
</beans>

リスト4:Javaでの呼び出し側クラス
public class AuthService {
   private CreditCardAuth cardAuth;
   public boolean buy(int itemNo, String cardNo){
      boolean card_result = cardAuth.auth(cardNo);
      (中略)
   }
(中略)
}

リスト5:Javaでのインターフェイス
public interface CreditCardAuth {
   public boolean auth(String cardNo);
}

リスト6:Javaでのモッククラス
public class CreditCardAuthMock implements CreditCardAuth {
   public boolean auth(String cardNo) {
   return true
   }
}

リスト7:Javaでの本番クラス
public class CreditCardAuthImpl implements CreditCardAuth {
   public boolean auth(String cardNo) {
      //クレジットカード処理を記述
   (中略)
   }
}

   テスト時にはリスト2の定義ファイルを読み込み、リスト4のAuthServiceクラスからはリスト6のCreditCardAuthMockクラスを呼び出すようにします。本番時にはリスト3の定義ファイルを読み込み、AuthServiceクラスからリスト7のCreditCardAuthImplクラスを呼び出すようにするのです。

   こうすることで、テスト中にはモックオブジェクトが呼び出しクラスに注入され、本番時には本物のオブジェクトが注入されるようにできます。

前のページ  1  2  3  4  次のページ


デル株式会社
著者プロフィール
株式会社アスタリクス  大西 正太
JavaEEフレームワークの設計構築や開発プロセス策定などの業務を経て、現在は新規ビジネス創生に携わる。Ruby on Rails上に構築したオープンソースのCMS「Rubricks」(http://rubricks.org/)のコミッタ。


INDEX
第4回:DIコンテナとの比較
  はじめに
Java/DIのモックオブジェクト
  Railsでモックを実現
  Java/DIのトランザクション