2011-10-24 10 views
0

私は複数のプロジェクトを持つソリューションを持っており、これらのプロジェクトの1つは永続マネージャーを呼び出す私のサービスクラスです。複数のプロジェクトと単体テストでの城ウィンザーの設定

私は次のようにユニットテストを書きたいと思います:私はそれはのためにだと信じてい

this.UoMService.Create(unitOfMeasure); // Fails here as UoMService is null 

[Test] 
    public void Create_HappyPath_Success() 
    { 
     // Arrange 
     UnitOfMeasure unitOfMeasure = new UnitOfMeasure(); 
     unitOfMeasure.Code = "Some new unit of measure"; 
     unitOfMeasure.DataOwner = 1; 

     // Act 
     this.UoMService.Create(unitOfMeasure); // Fails here as UoMService is null 

     // Assert something 

    } 

は今、私はこの行のnull参照の例外を取得していますキャッスルウィンザーが呼び出されていないため、UoMServiceがインスタンス化されていないという事実です。 My Castle Windsorアプリケーションインストーラは別のプロジェクト、つまり私のASP.NET MVCプロジェクトで定義されています。だから私の最初の質問は、ユニットテストを実行するためにそのインストーラを再利用できるかどうかということです。

この問題を回避するために、私は自分のWebプロジェクトのインストーラにリンクして、私の単体テストプロジェクトに新しいインストーラを作成しました。それから私は私のセットに次のコードを使用:

[SetUp] 
    public void ControllersInstallerTests() 
    { 
     this.containerWithControllers = new WindsorContainer(); 
     IoC.Initialize(this.containerWithControllers); 

     this.containerWithControllers.Install(FromAssembly.This()); 
    } 

私がテストを実行したときに、私は次のエラーを取得する。この時間:

SetUp : Castle.Windsor.Configuration.Interpreters.XmlProcessor.ConfigurationProcessingException : Error processing node resource FileResource: [] [] ----> Castle.Core.Resource.ResourceException : File C:\Projects\DavidPM\Services\MyProject.Services.ServiceImpl.Test.Unit\bin\Debug\Config\Windsor.config could not be found

疑問は、なぜそれがビンに見ているさを\デバッグフォルダ?

キャッスルウィンザーの初心者として、私は私のユニットテストのためにキャッスルウィンザーにフックするために何をすべきかはわかりません。

答えて

1

ユニットテストでIoCコンテナを接続する必要があります。本番環境では、IoCコンテナは依存関係を解決します。単体テストでは、テストの一部として依存関係を作成します。通常は、モックフレームワークを使用して、単独でテストできます。

+0

あなたは正しいです。ありがとうございました。 – DavidS

0

設定ファイルを出力ディレクトリにコピーします。

関連する問題