2013-01-11 12 views
7

.NET 4.0で動作するビジネスレイヤの単体テストを記述しています。ビジネスレイヤーは、通常SOAPおよびREST Webサービス内で実行されるC#クラスライブラリです。私たちのアプリケーションは、ロギングのために別のラッパーアセンブリ内でlog4netを使用します。ロギングアセンブリのC#コードには、log4netに構成ファイルの名前を通知するアセンブリ情報ディレクティブがあります。このファイルは、コンフィグレーションファイルの名前を示すために使用されています(アセンブリ:log4net.Config.XmlConfigurator(ConfigFile = "AcmeLogging.config"、Watch = true) ]Visual Studio/Microsoft Test Frameworkから実行すると、Log4netは構成ファイルを見つけることができません

Webサービスでは、ラッパーを介してlog4netを初期化すると正常に動作します。ユニットテストアセンブリから初期化すると、コンフィギュレーションファイルが表示されません。 configuratinoファイルは、実行ディレクトリにコピーされるプロパティによって設定され、bin \ debugディレクトリに表示されます。同じフォルダ内で実行されているロギングアセンブリを使用したクイックコンソールテストプログラムはうまく動作します。好奇心をそそるのは、動作の問題が断続的であり、異なる開発者のマシン上で異なる時間にポップアップし、決定論的な方法では解決できないということです。

ラッパーアセンブリコードを実行すると、log4netLogManager.GetLogger()呼び出しは正しく返されますが、log.Logger.Repository.GetAppenders()によって返されたアペンダーのリストは空です。この誤った動作は、ファイルがBin \ Debugフォルダーにあるかどうかにかかわらず同じであるため、ファイルが表示されていないと考えられます。

Microsoft Test Frameworkでlog4netを実行することについて何か不足していることについての手がかりをいただければ幸いです。

答えて

8

単体テストは、単体テストに構成ファイルが必要な場合、それらを配備項目として含める必要があるという点でユニークです。ここで私は私のテストクラス内でこれを行う方法の例です:Deploymentに加えて

[TestClass] 
[DeploymentItem("hibernate.cfg.xml")] 
public class AsyncForwardingAppenderTest 
{ 

} 

あなたはテストの設定で展開を有効にする必要があります属性。これを行うには、Test-> Edit Test Settings->に行きます。次に右側のDeployment領域をクリックします。チェックボックスEnable Deploymentをクリックします。

これを実行してテストを実行した後、設定ファイルはテスト結果フォルダに配置する必要があります。 TestResults \ username_machine日付スタンプ\ Out。あなたの設定ファイルがこのフォルダにない場合、動作しません。これがDeploymentItem属性の機能です。このファイルはOutフォルダに貼り付けられます。

すべてのテストクラスにDeploymentItem属性を含めたくない場合は、log4netを使用するすべてのテストがDeploymentItem属性を継承し、それをマークする基本テストクラスを作成することでした。

+0

これは私たちが必要としていたもので、これはチーム全体を非常に幸せにするでしょう。どうもありがとうございました。私はこの回答に投票したいと思いますが、そうするには十分なSO活動がありませんが、将来の読者はこれを投票に追加投票してください。 –

関連する問題