我有一个用于测试 ASP.NET MVC 项目的 Visual Studio 单元测试项目。
将程序集级 log4net.Config.XmlConfigurator
属性添加到 AssemblyInfo.cs 不起作用,SO 上的其他人发现他们必须直接调用 log4net.Config .XmlConfigurator.Configure();
问题是,单元测试如何做到这一点?在类方法上使用 Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize
属性的答案不起作用。
对我来说,这段代码会导致在输出窗口中记录一个 InvalidOperationException
并且测试 session 会提前爆炸。
[TestClass]
public sealed class Startup
{
[AssemblyInitialize]
public void Configure()
{
System.Diagnostics.Debug.Write("Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize");
}
}
阅读文档,MSDN 说不要在 ASP.NET 的测试项目上使用 AssemblyInitialize
,因为它们可能会被多次调用。
那么如何才能在运行任何测试之前配置 log4net?
最佳答案
答案是我误用了 AssemblyInitialize
.
一旦我将调试器设置为在第一次出现异常时停止,我就能够读到我的方法不是静态的,并且我没有添加接受 TestContext
的参数。
如果你问我,如果方法必须以某种方式使用,那么属性的使用非常糟糕。不太容易被发现。
无论如何,这有效:
[TestClass]
public static class Startup
{
[AssemblyInitialize]
public static void Configure(TestContext tc)
{
log4net.Config.XmlConfigurator.Configure();
}
}
关于不要将其用于 ASP.NET 测试的建议,请采纳。它可能会运行不止一次,但这并不重要。
关于c# - MSTest - 如何为 UnitTest 项目初始化 log4net?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692795/