如何使用NUnit3以编程方式运行TestFixture

时间:2018-01-03 21:53:46

标签: c# nunit nunit-3.0

我一直试图找出以编程方式运行TestFixture的好/最佳方式,但似乎无法找到使用NUnit3的方法。我跟着一个this post但它似乎对我不起作用,它似乎是运行一个我可能没有的特定测试或测试列表,我所拥有的只是TestFixture类的名称。

我还阅读了几篇相当陈旧的帖子,并提到使用的东西,如TestRunner和TestPackage等,我收集的内容在NUnit3中不再可用。我可以使用命令行和nunit3-console运行/执行我的测试类,我应该在这里使用从我的程序调用可执行文件的方法吗?

2 个答案:

答案 0 :(得分:0)

引用NUnitLite并创建Main程序绝对是直接运行测试的选项。您必须使用相同版本的nunit框架和nUnitlite程序集才能工作。

NUnitLite的AutoRun测试运行程序的调用顺序因版本而异。您可以使用intellisense进行检查。对于3.9,使用这样的代码......

new AutoRun().Execute(args);

注意:

  1. 如果测试位于同一个程序集中,则不需要程序集作为构造函数的参数。
  2. 如果从命令行运行,args是传递给测试可执行文件的相同参数数组。
  3. 如果以编程方式运行,则需要作为字符串数组元素的任何参数。不要指定文件名。例如,传递new string[] { "--test:Name.Of.MyFixture" }来运行灯具。

答案 1 :(得分:0)

我假设解决此问题的理想方法是使用NUnitLite AutoRun,但我无法使其正常工作,因此我选择通过Process调用nunit3-console的选项

string nunit = @"C:\Program Files (x86)\NUnit.org\nunit-console\nunit3-console.exe";
        string assembly = @"C:\Path\to\assembly.dll";
        string testFixture = " --where class=" + fixtureToRun;
        string work = @" --work=C:\Path\to\store\results\";
        string args = assembly + testFixture + work;

        ProcessStartInfo processStartInfo = new ProcessStartInfo(nunit, args);
        processStartInfo.RedirectStandardOutput = true;
        processStartInfo.UseShellExecute = false;

        using (Process process = new Process())
        {
            process.StartInfo = processStartInfo;
            process.Start();

            bool completed = process.WaitForExit(60000);

            string result = process.StandardOutput.ReadToEnd();
            Console.WriteLine(result);
        }

希望这可以帮助某人,我仍然愿意以更有效的方式提出建议