C# 指定要运行的NUnit测试

C# 指定要运行的NUnit测试,c#,nunit,C#,Nunit,我有一个NUnit项目,它创建了一个控制台应用程序来运行测试。入口点如下所示: class Program { [STAThread] static void Main(string[] args) { string[] my_args = { Assembly.GetExecutingAssembly().Location }; int returnCode = NUnit.ConsoleRunner.Runner.Main(my_ar

我有一个NUnit项目,它创建了一个控制台应用程序来运行测试。入口点如下所示:

class Program
{
    [STAThread]
    static void Main(string[] args)
    {
        string[] my_args = { Assembly.GetExecutingAssembly().Location };

        int returnCode = NUnit.ConsoleRunner.Runner.Main(my_args);

        if (returnCode != 0)
            Console.Beep();

    }
}
如果我只想运行这一个测试,我可以传递什么作为参数:

[TestFixture]
public class EmailNotificationTest
{
    [Test]
    public void MailerDefaultTest()
    {
        Assert.IsTrue(false);
    }
}
显然,这是支持的,同样清楚的是,我不知道如何做到这一点

更新


它看起来像是v3+,这可以通过
--test
选项实现,根据。

NUnit附带了一个应用程序,应用程序可以启动您想要的测试。它非常有用,您不必编写代码来运行测试。

正如@Toto所说,使用,您可以选择


您可以使用
[Category(“RunOnlyThis”)]
属性标记测试,然后告诉NUnit仅运行与此特定类别匹配的测试:

 /include:RunOnlyThis
是需要添加到控制台运行程序参数的属性。更多信息。

最新版本(NUnit 3)允许调试测试并指定要执行的测试

调试

--debug
选项启动调试器以调试测试,例如:

nunit3-console.exe "C:\path\to\the\tests.dll" --debug
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --test="EmailNotificationTest.MailerDeSecondTest" 
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --testlist="testnames.txt" 
过滤测试

现在您有许多不同的方法来选择要运行的测试。第一个选项是
--test=NAMES
。将此选项与
--debug
相结合,您可以轻松地只调试一个测试,例如:

nunit3-console.exe "C:\path\to\the\tests.dll" --debug
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --test="EmailNotificationTest.MailerDeSecondTest" 
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --testlist="testnames.txt" 
如果类具有名称空间,请不要忘记它

使用
--testlist=PATH
选项,您可以运行文件中指定的所有测试,例如:

nunit3-console.exe "C:\path\to\the\tests.dll" --debug
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --test="EmailNotificationTest.MailerDeSecondTest" 
nunit3-console.exe "C:\path\to\the\tests.dll" --debug --testlist="testnames.txt" 

还有
--where=EXPRESSION
选项指示将运行哪些测试。此选项旨在扩展或替换早期的
--test
--include
--exclude
选项。如果您想了解有关此选项的更多信息,请查看

您可以使用NUnit控制台的/run开关指定要运行的测试

像这样:

/run:namespace.classname.functionName
例如


我真的希望自动将其附加到调试器,而应用程序不允许我这样做(或者至少不容易)。我有一些测试失败了,我正试图找出原因。是的,这是我知道这是可能的,但这不是我想要做的。在这种情况下,我最新的代码更改破坏了一些单元测试,我正试图找到根本原因。如果我从visual studio以控制台应用程序的形式运行NUnit项目,我可以在其中设置断点并跟踪代码,这就是我正在尝试做的。您可以将visual studio附加到NUnit,您的断点将到达。我经常这样做。在visual studio中还提供了右键单击功能,可以使用visual studio调试器启动单元测试(非常有用)。我没有使用ConsoleRunner,但它可能支持
[Explicit]
[Category]
属性。对于那些寻找
nunit3 console.exe
的人来说,这在GUI中是不必要的,不过。。。我希望能够在不更改代码的情况下实现特定性,这样我就可以像在GUI中一样对特定测试进行本地化。这不可能吗?@JeremyHolovacs:NUnit doc对此保持沉默,我想console runner不允许这样做。考虑到这一点,我将使用附加调试器-这非常简单,您可以在SO()上找到如何执行此操作。我最终使用了
/fixture:EmailNotificationTest
,并将我的测试放在它自己的类中。每次我调整某些东西时附加调试器都很烦人。。。但答案似乎是“你做不到”。可悲的是,官方文件没有具体说明什么是
名称。看起来它是完全限定的类名?对于--testlist,如何指定在DLL中找到的testlist?我一直找不到文件错误。我们将这些测试文件存储在哪里?@gideon-使用C#中的nunit3,对我有效的模式是:--test=“namespace.class name.method name”。此外,--debug开关对此也不是必需的