【问题标题】:Running NUnit from code - how can I output results to the console?从代码运行 NUnit - 如何将结果输出到控制台?
【发布时间】:2012-01-11 13:07:56
【问题描述】:

我正在使用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;
    }
}

【问题讨论】:

    标签: .net unit-testing nunit


    【解决方案1】:

    在运行测试之前尝试存储控制台的当前输出流

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-30
      相关资源
      最近更新 更多