Guice はテスト可能なコードを生成することを目的としており、単体テストでは必要ないと言われました。しかし、Guice を使用せずに Singleton(@Singleton) をテストするにはどうすればよいですか?
3 に答える
単体テストでは Guice (または任意の DI フレームワーク)は必要ありません。通常、SUT は十分に小さいため、手動 DI で十分です。
次に、「シングルトンをテストする」方法について説明します。他のクラスをテストするのと同じ方法で、これは singleton-as-a-scope の美しさの一部です。テストメソッドで「シングルトン」の新しいインスタンスを作成し、テストしてから破棄します。SUT が以前のテストの影響を受けないようにし、テストごとに異なる依存関係を設定できるようにしたいので、設計パターンではなくスコープを使用しているという事実は良いことです。テストするために特別なことをする必要はありません。
実際、私の個人的な見解では、DI フレームワークを必要とするテストは疑いの目で見ることができます。これは、単体テストではなく統合テストのように聞こえます。単体テストはスタンドアロンである必要があり、テストしたくないもののモック バージョンを含め、すべての依存関係を手動で明示的に接続する必要があります。主流の開発用語では、「単体テスト」は、開発者によって作成されたテストを意味する希釈される可能性があることを私は知っています。ただし、これは用語の適切な使用法であることを意味するものではありません。
その観点から言えば、いいえ、Guice または Spring DI に依存する必要があります (そして、おそらくそうすべきではありません!)。
Guice (他) の優れている点は、実際には次のとおりです。完全なシステムに使用することで、DI を使用せずにテストをより簡単に行うことができます。
したがって、最高評価の答えは正しいと思います。シングルトンをテストするには、作成してテストするだけです。それには特定の魔法はありません。
Guice は依存性注入を行いますが、テストでも必要になると思います。
Guice を使用すると、注入されたクラスの実装をモック オブジェクト (実際のオブジェクトではなくスタブ) に簡単に変更できます。そのため、テストはスタブ環境で実行でき、アプリの他のレイヤーとは独立して、より高速にテストできます。