log4net包装器不记录(在MSTest UTs期间)

问题描述 投票:2回答:4

我有一个log4net的包装类来记录一组dll库中的多个类和程序集。 (这可能是设计不佳,但是......不要问)代码基本上是这样的:

public static class Logger
{
    private static ILog log;

    static Logger()
    {
        log = LogManager.GetLogger("abcd");
        XmlConfigurator.Configure(new FileInfo("LoggerConfig.log4net"));
        log.Info("=== NEW SESSION ===");
    }

    public static void Log(string message)
    {
        log.Debug(message);
    }
}

现在..如果静态构造函数是一个简单可执行文件的静态主程序,这很好用(我很快就制作了一个控制台应用程序来测试它)。但在这里却没有。由于我处理独立程序集而不是可执行程序,因此我可以轻松测试记录程序的唯一方法是通过MSTest。这可能是导致此问题的原因。我不是100%肯定,如果它可能根本找不到配置文件。它在编译时被复制并且与包含记录器类的程序集位于同一文件夹中,所以我认为应该可行。

bleh ..卡住了三个小时。 :T有什么建议吗?

c# .net visual-studio log4net mstest
4个回答
5
投票

我的通灵调试器说你的LoggerConfig.log4net不在正确的目录中。它未部署到您的测试目录,并且在运行测试时未找到。这就是没有日志输出的原因。在测试目录中部署文件,您将获得日志输出。

编辑:更准确地说,您需要将其添加为测试 - >编辑测试设置 - >>部署下的部署文件(如下所述:How can I get "Copy to Output Directory" to work with Unit Tests?


0
投票

您是否尝试通过绝对路径引用配置文件?也许MSTests的根目录与Console App根目录不同?


0
投票

Log4net在App.config中使用配置?试着把它们也放在测试库中吗?

我知道Application有很多库的问题,de config只能在Main-Application中。


0
投票

MsTest shadow会复制整个地方的内容,而且同行和Hinek说文件的位置可能就是问题所在。我发现在测试程序集中包含文件是解决这个问题的一种方法。

查看以前的answer here了解详情。

© www.soinside.com 2019 - 2024. All rights reserved.