我有一个Visual Studio单元测试项目,用于测试ASP.NET MVC项目。
将程序集级别的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/