DIを用いた単体テスト
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/06/17 02:57 UTC 版)
「依存性の注入」の記事における「DIを用いた単体テスト」の解説
DIを用いることで、単体テストにおいて簡単に依存性をテスト用のクラス(モックオブジェクト等)に差し替えることができる。以下はDIを用いた、前述のVerySimpleStockTraderImplクラスのテストケースの例である。この例では、IOnlineBrokerageService, IStockAnalysisServiceインタフェースを実装したテスト用クラスを作成し、DIによりそれを注入することで、実際のクラスを用いることなく、単体テストを実現している。 public class VerySimpleStockBrokerTest { // IOnlineBrokerageServiceを実装した単純なスタブ public class StubBrokerageService implements IOnlineBrokerageService { public String[] getStockSymbols() { return new String[] {"ACME"}; } public double getBidPrice(String stockSymbol) { return 100.0; // (テストに十分な値) } public double getAskPrice(String stockSymbol) { return 100.25; } public void putBuyOrder(String stockSymbol, int shares, double buyPrice) { Assert.Fail("Should not buy ACME stock!"); } public void putSellOrder(String stockSymbol, int shares, double sellPrice) { // このテストでは使用しない throw new NotImplementedException(); } } public class StubAnalysisService implements IStockAnalysisService { public double getEstimatedValue(String stockSymbol) { if (stockSymbol.equals("ACME")) return 1.0; return 100.0; } } public void TestVerySimpleStockTraderImpl() { // このテスト専用の依存性を指定するため、DIコンテナに直接登録している DependencyManager.register( IOnlineBrokerageService.class, StubBrokerageService.class); DependencyManager.register( IStockAnalysisService.class, StubAnalysisService.class); IAutomatedStockTrader stockTrader = (IAutomatedStockTrader) DependencyManager.create(IAutomatedStockTrader.class); stockTrader.executeTrades(); }} 実装がDBやネットワークにアクセスする場合、また古いEJBのような重たいコンポーネントの場合、そのままでは単体テストを行うことは難しい。しかし、上記のようにDIを用いて依存関係のみをテスト用のものに差し替えることで、本来のテスト対象のプログラムには手を加えることなく、簡単に単体テストを行うことができる。
※この「DIを用いた単体テスト」の解説は、「依存性の注入」の解説の一部です。
「DIを用いた単体テスト」を含む「依存性の注入」の記事については、「依存性の注入」の概要を参照ください。
- DIを用いた単体テストのページへのリンク