ユニットテストにはどのようにIoCコンテナを使用できますか? IoCを使用して、巨大なソリューション(50以上のプロジェクト)でモックを管理すると便利ですか?どんな経験ですか?単体テストで使うのにうまくいくC#ライブラリ?ユニットテストにIoCを使用する
答えて
一般的に言えば、単体テストはすべて責任の分離に関するものであるため、DIコンテナは単体テストには必要ありません。
は、アプリケーション全体ではコンストラクタ・インジェクションpublic MyClass(IMyDependency dep) { }
を使用するクラスを考えてみましょう、それがグラフIMyDependency
の後ろに隠れて巨大な依存関係があることかもしれないが、ユニットテストでは、あなたは、単一にまでそれをすべてフラット化Test Double。
MoqやRhinoMockのような動的モックを使用してTest Doubleを生成することはできますが、必須ではありません。いくつかのケースでは
var dep = new Mock<IMyDependency>().Object;
var sut = new MyClass(dep);
、auto-mocking containerがあると便利にすることができますが、本番アプリケーションが使用するのと同じDIコンテナを使用する必要はありません。
...テスト対象にIoCコンテナが*依存していない限り、あなたのテストでは必要ないはずです。単体テストを行うときにオブジェクトグラフの大部分を削除します。 –
@マーク・シーマンこれは意味があります...しかし、統合テストはどうですか?私はUIテストで遊んでいました。構成ルートを共有しなければならない状況に直面しました。コメントはありますか? –
@Arnis L .:統合テストの重要性は低いです。 DIコンテナを使用してコンポーネントを配線することもできますが、その場合は、皮下テストまたは完全なシステムテストを実行しない限り、コンテナの構成がフルアプリケーションとは異なる可能性がありますアプリケーションのコンテナ構成を再利用できます。 –
単体テストにはどのようにIOCコンテナを使用できますか?
のIoCが簡単に(すなわちモックを使用して)単独でユニットテストを行いますプログラミングパラダイムを強制します:インターフェースの使用は、新しい()、なしシングルトン...
しかし、テストのためのIoCコンテナを使用して実際には要件ではない、それはちょうどいくつかの施設を提供するモックの注入が、手動で行うことができます。
IoCを使用して、巨大なソリューション(50以上のプロジェクト)でモックを管理すると便利ですか?
IoCを使用してモックを管理することがどういう意味なのですか?とにかく、IoCのコンテナは、通常、テストの際にモックを注入するだけではありません。リファクタリングを可能にするまともなIDEサポートがあれば、なぜそれを使用しないのですか?
はい、巨大なソリューションでは、エラーが発生しにくく、リファクタリングの面で優れたソリューションが必要です(タイプセーフなIoCコンテナまたはIDEの優れたサポート)。
私はテストでIoCコンテナを使用することがよくあります。確かに、彼らは純粋な意味での単体テストではありません。 IMO彼らはより多くのBDDがあり、リファクタリングを容易にします。テストではリファクタリングに自信を持っています。不適切に書かれたテストは、セメントをあなたのコードに注ぐようなものです。
は、次のことを考えてみましょう:
[TestFixture]
public class ImageGalleryFixture : ContainerWiredFixture
{
[Test]
public void Should_save_image()
{
container.ConfigureMockFor<IFileRepository>()
.Setup(r => r.Create(It.IsAny<IFile>()))
.Verifiable();
AddToGallery(new RequestWithRealFile());
container.VerifyMockFor<IFileRepository>();
}
private void AddToGallery(AddBusinessImage request)
{
container.Resolve<BusinessPublisher>().Consume(request);
}
}
ギャラリーに画像を追加する際に起こるいくつかのものがあります。画像のサイズが変更され、サムネイルが生成され、ファイルはAmazonS3に保存されます。コンテナを使用することで、テストする動作だけを簡単に分離することができます。この場合は永続的な部分です。
自動あざけるコンテナの拡張子この技術を使用する際に便利です:SimpleInjectorのような未登録/にUnknownサービスを解決する能力を持つコンテナを使用して http://www.agileatwork.com/auto-mocking-unity-container-extension/
+1「like pouringあなたのコードにセメント "。私はいつもそれを使い始めました。 –
、DryIocは(その鉱山)はまだ実装されていないインタフェースのためのモックを返すことができます。
これは、最初の単純な実装とその模倣された依存関係を使用して開発を開始し、進行状況に応じて実際のものと置き換えることができることを意味します。
- 1. Unity IoCでlog4netを使用する
- 2. 拡張メソッドでIoCを使用する
- 3. 名前付きコンポーネントを使用してこのIoC登録をユニットテストする方法は? (Autofac)
- 4. I/Oユニットテストにメモリディスクを使用する
- 5. インテグレーションテストで使用するIOC登録を無効にする
- 6. IoCを適切に使用するのはいつですか?
- 7. 複数のコンクリートタイプにIOCコンテナを使用する
- 8. MonoDroidのAOP(PostSharp)を使用したIoC
- 9. IoCコンテナなしでコントローラをどのようにユニットテストできますか?
- 10. ユニットウィンザーをユニットテストで使用するクラス
- 11. $ httpを使用するコントローラのユニットテスト
- 12. Djangoユニットテストでセッションオブジェクトを使用する
- 13. AutoMapperを使用するコントローラのユニットテスト
- 14. boost.testユニットテストでJenkinsを使用する
- 15. ユニットテストでassertRaisesでerrnoを使用する
- 16. リクエストライブラリを使用するPythonアプリケーションのユニットテスト
- 17. MVCアプリケーションでIoCフレームワークを使用するとは何ですか?
- 18. IoCコンテナを使用するオーバーロードメソッドを持つ
- 19. コントローラパラメータを使用したユニットテスト
- 20. Iphoneユニットテスト:SQLを使用
- 21. アクションメソッドのモデルオブジェクトを解決するためにIoCを使用する
- 22. RavenDBを使用するためにSimple Injector IoCを設定する方法
- 23. 同じインターフェイスのMVC多重登録を使用するIOC
- 24. Entity Framework CTP5とNinjectをIOCとして使用する
- 25. UnityをIoCとして使用するコンストラクタ依存性注入
- 26. SignalR 2.0で既存のIoCコンテナを使用する
- 27. MVVMCrossのIOCコンテナのみを使用する方法
- 28. ポータブルクラスライブラリ用のIoCコンテナ
- 29. UIユニットテスト用にGoogle Toolboxを使用する方法
- 30. プラグインアーキテクチャにはIoCコンテナを使用してください
@マークセマンはあまりにも謙虚だが、この質問に興味があれば、少なくとも[AutoFixture](http://autofixture.codeplex.com)に気づくべきである。 –
良いことがあるMiguel CastroのDIとMockingの関係について話をする:https://vimeo.com/68390510 – GregC