6

私はIServiceを必要とするコンストラクタでテストクラスを持っています。xUnitでDependency Injectionを使用することはできますか?

public class ConsumerTests 
{ 
    private readonly IService _service; 
    public ConsumerTests(IService servie) 
    { 
     _service = service; 
    } 

    [Fact] 
    public void Should_() 
    { 
     //use _service 
    } 
} 

私はテストクラスを構築するために選択の私のDIコンテナをプラグインにしたいです。

xUnitでこれは可能ですか?

答えて

0

あなたは何を試そうとしていますか? IServiceの実装またはDIコンテナの配線?

あなたがIService実装をテストしている場合は、テストでそれらを直接インスタンス化(およびすべての依存関係をからかっ)する必要があります。

var service = new MyServiceImplementation(mockDependency1, mockDependency2, ...); 
// execute service and do your asserts, probably checking mocks 

あなたはDIコンテナの配線をテストしようとしている場合は、必要に手を差し伸べて、構成済みのコンテナを明示的に取得します。あなたのためにそれを行うだろうない「組成ルート」(擬似コードは、以下の、Autofac風味の一種)はありません。

var myContainer = myCompositionRoot.GetContainer(); 
var service = myContainer.ResolveCompnent<IService>(); 
// execute service and do your asserts with the actual implementation 

はあなたが同じオブジェクトを使用する必要が統合テストを実行するためのxUnitを使用している場合複数のテスト、Fixtures:http://xunit.github.io/docs/shared-context.htmlを見てください。

0

このソースコードのうち、この使用nugetパッケージを実行する方法があります:https://github.com/dennisroche/xunit.ioc.autofac

それは限り、あなたは[Fact]を使用して素晴らしい作品が、[Theory]を使用し始めたとき、私がブロックされてしまいました。これを整理するプル要求があります。

自分自身のブロックを解除するには、CollectionFixtureを使用してコンテナを注入し、コンテナからインタフェースを解決します。

関連する問題