7

.NET4.0で実行されているビジネスレイヤーの単体テストを作成しています。ビジネスレイヤーは、通常、SOAPおよびREST Webサービス内で実行される単純なC#クラスライブラリです。このアプリケーションは、ロギング用に別のラッパーアセンブリ内でlog4netを使用します。ロギングアセンブリのC#コードには、log4netに構成ファイルの名前を通知するアセンブリ情報ディレクティブがあります。

[アセンブリ:log4net.Config.XmlConfigurator(ConfigFile = "AcmeLogging.config"、Watch = true)]

ラッパーを介したlog4netの初期化は、Webサービスで正常に機能します。単体テストアセンブリを使用して初期化すると、構成ファイルが表示されないように見えます。configuratinoファイルは、実行ディレクトリにコピーされるようにプロパティを介して構成され、bin\debugディレクトリに表示されます。同じフォルダ内から実行されているロギングアセンブリを使用したクイックコンソールテストプログラムは正常に機能します。不思議なことに、動作の問題は断続的であり、さまざまな開発者のマシンにさまざまな時間に発生し、決定論的な方法で解決することはできません。

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

Microsoft Test Frameworkでlog4netを実行することについて私たちが見逃していることについての手がかりは、大いにありがたいです。

4

1 に答える 1

8

単体テストは、単体テストで構成ファイルが必要な場合、それらをデプロイメント項目として含める必要があるという点で独特です。テストクラス内でこれを行う方法の例を次に示します。

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

}

属性に加えて、テスト設定で展開Deploymentを有効にする必要があります。これを行うには、[テスト]->[テスト設定の編集]->に移動します。次に、右側の領域をクリックします。チェックボックスをクリックします。DeploymentEnable Deployment

これを実行してテストを実行した後、構成ファイルはテスト結果フォルダーに配置されます。TestResults \ username_machine datetamp\Out。設定ファイルがこのフォルダにない場合は機能しません。これは、DeploymentItem属性が行うことです。このOutフォルダにファイルを貼り付けます。

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

于 2013-01-11T06:29:44.103 に答える