私はTDDの基本原則に精通だが、あること:なし実装の ダミーの実装と実際の実装の両方を持つインタフェースを使用している場合、ユニットテストの最適なアプローチは何ですか?
- 書き込みテスト、これらは失敗します
しかし、インターフェイスと実装がどこに適しているのか少し混乱しています。私は暇な時間にSpringのWebアプリケーションを作成しています。銃を燃やすのではなく、インターフェイス/実装を少し良くテストする方法を理解したいと思います。ここで作成した簡単なサンプルコードを取ってください。
私はしかし、地面からアプリケーションを得るために、私はちょうど戻りますDummyUserService
実装を置換しましたが、最終的にデータベースを照会します。このの実際の実装があるだろう、UserService
インターフェースを作成しましたpublic class RunMe { public static void main(String[] args) { // Using a dummy service now, but would have a real implementation later (fetch from DB etc.) UserService userService = new DummyUserService(); System.out.println(userService.getUserById(1)); } } interface UserService { public String getUserById(Integer id); } class DummyUserService implements UserService { @Override public String getUserById(Integer id) { return "James"; } }
いくつかの静的データ
質問:上記のテスト方法をどのように実装できますか?
は私が
getUserById()
を呼び出すとき、それはJames
を返すだろうとテストDummyUserServiceTest
というクラスとテストを作成することができ、時間の無駄でない場合は非常に簡単と思われます(?)。その後、というテストクラスを作成して、
getUserById()
がデータベースからユーザー名を返すことをテストすることもできます。これは私を少し混乱させる部分です。そうすることで、単体テストの境界を本質的に超えてしまわず、より多くの合同テスト(DB上でヒットします)になりますか?質問:ダミー/スタブ付きの実装と実際の実装のどちらを使用するか、どの部分をユニットテストする必要があり、どの部分をテストしないままにしておくことができますか?
私は昨夜、このトピックにグーグルで数時間を費やし、そしてほとんどが実際にテストする必要がありますどのような助言の王国にあるものTDD上のチュートリアル、またはJUnitの使用方法の例が、何のいずれかを発見しました。しかし、私は十分な検索をしなかったし、適切なものを探していなかったことは全く可能です...