2011-11-03 360 views
10

我有一个NUnit项目创建一个控制台应用程序来运行测试。入口点是这样的:指定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); 
    } 
} 

这显然是支持的,同样清楚我有不知道该怎么做。

UPDATE

它看起来像V3 +,这是可能的--test选项,每the documentation

+0

我没有使用ConsoleRunner,但它可能会尊重'[Explicit]'和'[Category]'属性。 – jrummell

+0

对于那些寻找'nunit3-console.exe'请参阅http://stackoverflow.com/questions/37297838/run-individual-test-from-nunit3-console-exe – KCD

回答

10

您可以标记与[Category("RunOnlyThis")]属性测试,然后告诉NUnit的运行测试只有这个特定类别匹配:

/include:RunOnlyThis 

是你需要添加到控制台运行参数的属性。更多here

+0

从GUI不需要这样做,但是......我希望能够具体说明而无需更改代码,以便我可以本地化特定的测试,就像我可以从GUI执行的那样。这不可能吗? –

+0

@JeremyHolovacs:NUnit doc对此保持沉默,我认为控制台运行者不允许它。考虑到这一点,我会去附加调试器 - 这很容易,你可以找到如何做到这一点(因为[例如这里](http://stackoverflow.com/questions/759854/how-do-i经营;-NUnit的功能于调试模式从 - 视觉工作室))。 –

+1

我结束了使用一个'/夹具:EmailNotificationTest'并把我的测试放在它自己的类中。每次调整一些东西都会让人烦恼......但答案似乎是“你不能做到”。瘸。 –

2

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

+0

我真的想自动将它附加到调试器,应用程序不允许我这样做(或者至少不容易)。我有一些失败的测试,我试图看看为什么。 –

4

正如@Toto所说,使用NUnit Gui,你可以挑选。

enter image description here

+0

是的,这是我知道这是可能的,但这不是我想要做的。在这种情况下,我最近的代码更改打破了一些单元测试,并且我试图找到根本原因。如果我从Visual Studio运行NUnit项目作为控制台应用程序,我可以将断点放入并跟踪代码,这正是我正在尝试执行的操作。 –

+1

你可以将视觉工作室附加到nunit,你的breakpioints将达到。我经常这样做。 还有http://www.testdriven.net/在visual studio中提供rightclick功能来启动Visual Studio调试器的单元测试(非常有用)。 – Toto

9

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

调试

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

nunit3-console.exe "C:\path\to\the\tests.dll" --debug 

筛选试验

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

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

不要忘了命名空间,如果类有它。

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

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

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

+0

官方文件遗憾地没有指定'NAMES'的真实含义。看起来这是完全合格的类名? – gideon

+0

为--testlist,你如何指定在DLL中找到的测试列表?我一直无法找到文件错误。我们在哪里存储这些测试文件? – Tree55Topz

3

您可以使用/运行切换NUnit控制台以指定要运行的测试。

像这样:

/run:namespace.classname.functionName 

例如

nunit-console.exe "C:\UnitTests.dll" /run:UnitTests.EmailNotificationTest.MailerDefaultTest