从代码运行NUnit - 如何将结果输出到控制台?

时间:2012-01-11 13:07:57

标签: .net unit-testing nunit

我正在使用RemoteTestRunner运行NUnit测试。最后,我得到一个包含结果的TestResult对象。单元测试项目编译为控制台应用程序。 问题是,在运行测试之后,输出会以某种方式重定向,并且我无法将结果打印到控制台。

这是代码。它不输出任何,甚至不输出"Open, sesame!"(虽然它确实运行到最后 - 在调试器中确认)。

有什么建议吗?

此外,是否有内置方法列出给定TestResults实例的失败结果?

    public static void Main()
    {
        TestPackage testPackage = new TestPackage(AssemblyPath);
        RemoteTestRunner remoteTestRunner = new RemoteTestRunner();
        remoteTestRunner.Load(testPackage);
        TestResult testResult = remoteTestRunner.Run(null);

        Console.WriteLine(testResult.IsFailure);

        Console.WriteLine("Open, sesame!");

    }
    public static string AssemblyPath
    {
        get
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            return path;
        }
    }

1 个答案:

答案 0 :(得分:3)

在使用

运行测试之前,您是否尝试存储控制台的当前输出流?
var currentOut = Console.Out;

然后在使用

执行运行后将其设置回来
Console.SetOut(currentOut);
  

此外,是否有内置方法列出给定TestResults实例的失败结果?

我找不到任何东西。但是,以下代码应该为您提供一些帮助。它以递归方式介绍组合的TestResult结构,并向控制台输出每个测试的结果。

static void OutputResult(TestResult result)
{
    if(result.HasResults)
    {
        foreach (var childResult in result.Results)
        {
            OutputResult((TestResult)childResult);
        }
        return;
    }

    Console.WriteLine("{0}:{1}", result.FullName, result.ResultState);
}