将NUnit测试添加到NLog输出

时间:2015-06-29 21:29:36

标签: nunit nlog

我正在通过NUnit运行测试,并希望NLog消息能够快速告诉我每条日志消息的调用测试。像

这样的东西
<target xsi:type="File" 
          layout="${longdate} ${someMagic} ${message}"
          />

如果不深入研究NLog代码,有没有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

这是一个有效的解决方案:一组包含NLog ILogger.Error(..)方法等的扩展方法,查找NUnit [Test][TestCase]属性的堆栈

    public static void XError(this ILogger log, String message)
    {
        if (log.IsErrorEnabled == false)
            return;

        var prefix = GetCallerTestDescription();
        log.Error("[{0}] {1}", prefix, message);
    }

    private static string GetCallerTestDescription()
    {
        var stack = new StackTrace(false).GetFrames();

        if (stack != null)
        {
            foreach (var frame in stack)
            {
                var method = frame.GetMethod();
                var testAttributes = method.GetCustomAttributes<TestAttribute>();

                if (testAttributes != null && testAttributes.Any())
                {
                    return method.Name;
                }

                var tcAttributes = method.GetCustomAttributes<TestCaseAttribute>();
                if (tcAttributes != null && tcAttributes.Any())
                {
                    return method.Name;
                }

            }
        }