私は2つのプロジェクトを含むソリューションを作成しています:Webプロジェクトとテストプロジェクトです。私は依存性注入とテストのためのMOQのためのログ記録の目的のためにlog4netの、CastleWindsorを使用しています。MVC WebソリューションのLog4Net
問題は、テストの構成です。 HomeControllerをファイルにロギングしてテストしたいのですが、テストを実行するときにログに記録したくないと思います。
テストプロジェクトのログをスキップする方法はありますか?
にHomeControllerクラス:答えはテストのためにlog4netのを実装するための最良の方法である、ノーであれば
[TestClass]
public class HomeControllerTest
{
private static WindsorContainer _container;
[ClassInitialize()]
public static void InstallWindsor()
{
_container = new WindsorContainer();
// configure other classes
}
[ClassCleanup()]
public static void DisposeContainer()
{
_container.Dispose();
}
[TestMethod]
public void Index()
{
// Disponer
var mock = new Mock<IRowan>();
mock.Setup(m => m.DoSomething()).Returns("Home Page");
HomeController controller = new HomeController(mock.Object);
// Actuar
ViewResult result = controller.Index() as ViewResult;
// Declarar
Assert.IsNotNull(result);
Assert.AreEqual("Home Page", result.ViewBag.Title);
}
}
:
public class HomeController : Controller
{
// this is Castle.Core.Logging.ILogger, not log4net.Core.ILogger
public ILogger Logger { get; set; }
private IRowan _rowan;
public HomeController(IRowan rowan)
{
_rowan = rowan;
}
public ActionResult Index()
{
//In the [tests] Logger fails
Logger.Debug("GET Request traced");
Logger.Error("Example of Error");
String test = _rowan.DoSomething();
ViewBag.Title = test;
return View();
}
}
}
にそれはテストですか?
PD:コードを実行すると、正常に動作します。テストを実行すると、nullであるため、Loggerは例外をスローします。
PD:私はMicrosoft Technologyを使い始めています。
ちょうどそれをクリアするには、ロガーを注入する依存関係もありますか?これは通常、あなたが気にしないことの1つです - [例えばこれを参照](https://stackoverflow.com/questions/12591955/should-logging-infrastructure-be-injected-when-using-ioc-di-if -logging-facade-is)です。そうすれば、ロガーがそのように構成されないため、テスト中にログに記録することはありません。 –
ロガーはNuggetパッケージ** Castle.Windsor-log4net **を使用して注入され、[このチュートリアル](https://github.com/castleproject/Windsor/blob/master/docs/mvc-tutorial-part)に従います--adding-logging-support.md)を使用して設定します。 – albert