新しいソフトウェア開発プロジェクトでStructureMapを使用しています。チームメンバーの1人が、基本的にStructureMapコンテナー構成をテストする単体テストを実装しました。これを行うには、次のようにします。
- アプリケーションの名前空間のクラスに構成されているアセンブリのインスタンスの数をカウントします。
- クラスレベルで予期されるインスタンスを定義します
- 予想されるインスタンスが見つかったインスタンスの総数と一致することを表明します。
- 予想されるインスタンスがテストで定義されたインスタンスと一致することを表明する
この例は次のとおりです。
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
次のクラスの「単体テスト」もあります。
public MyClass(IEnvironmentRepository environmentRepository)
{
}
これらのテストでは、IEnvironmentRepositoryをモックしているため、ライブシステムで発生するようなコンテナーからの注入は行いません。
同僚は、「ユニットテストはそれ自体の構成のみをテストする」というコメントを付けて、structuremap configのユニットテストを無視しました。これは明らかにテストの目的であり、私の意見では完全に有効です。テストを無視した人に構造テストの構成を削除してIEnvironmentRepository
(テストはまだ無視されています)、完全な単体テストスイートを実行するように依頼したところ、すべて成功しました。次に、アプリケーションを実行しましたが、コンテナー構成が無効になったため、アプリケーションが倒れました。私の意見では、これはテストの価値を証明しました、私の同僚はまだ反対しました。彼は単に構成をテストするべきではないと述べましたが、これは単体テストの範囲内であると私は思います。
したがって、いくつかの質問があります。
- それは有効な単体テストですか?ストラクチャマップが機能するのではなく、コンテナの構成をテストしています(ただし、重複が確認できます)
- そうでない場合、テストせずに構成を検証するにはどうすればよいですか。誰かが誤って必要なコード行を削除してチェックインしないようにするにはどうすればよいですか?
- なければならない
MyClass
ユニットテストは、のインスタンスを解決IEnvironmentRepository
コンテナからとでこれを渡しますか?