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

How to run TestFixture programatically with NUnit3

我一直在尝试以编程方式找出 good/best 方法来 运行 TestFixture,但似乎找不到使用 NUnit3 的方法。我遵循了 但它似乎对我不起作用并且它似乎是 运行 我可能没有的特定测试或测试列表,我所拥有的只是 TestFixture 的名称class。

我还阅读了几篇很旧的帖子,并提到使用像 TestRunner 和 TestPackage 等东西,我收集到的东西在 NUnit3 中不再可用。我可以 run/execute 我的测试 class 使用命令行和 nunit3-console,这是我应该在这里使用的方法来从我的程序调用可执行文件吗?

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

NUnitLite 的 AutoRun 测试的调用顺序 运行ner 因版本而异。您可以使用智能感知来检查它。对于 3.9,使用这样的代码...

new AutoRun().Execute(args);

备注:

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

我假设解决此问题的理想方法是使用 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);
        }

希望这对某人有所帮助,我仍然愿意接受以更有效的方式执行此操作的建议