c# - MSTest - 如何为 UnitTest 项目初始化 log4net?

标签 c# asp.net-mvc unit-testing visual-studio-2012 log4net-configuration

我有一个用于测试 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/

相关文章:

c# - 重复的相机流

asp.net-mvc - 我应该在哪里添加 [JsonIgnore] 以防止某些属性被序列化?

angularjs - 为 Angular Controller 单元测试修改 $scope 值

jquery - Ajax.BeginForm 返回未定义的 JSON(开发工具显示正在返回 JSON)

java - 单元测试 Maven 插件

c# - C# 中基于 Web 的单元测试

c# - STL C++ 和 C# 容器之间的映射

c# - 如果 x = 3 且 z 未分配,为什么 z = x-- - --x 的计算结果为 2?

c# - 处理突然的 PayPal 付款取消

c# - ASP.NET MVC Cookie 实现