NUnit类别组合?

Eig*_*ite 22 .net tdd nunit unit-testing

在我的NUnit testfixtrues中,我有类似的东西

[Test,Category("catA")]
public void test1
{
    //
}

[Test,Category("catB")]
public void test2
{
    //
}

[Test,Category("catA")]
[Test,Category("catB")]
public void test3
{
    //
}
Run Code Online (Sandbox Code Playgroud)

现在在NUnit中,我希望能够选择catA和catB并运行catA catB 所在的测试.目前情况并非如此,NUnit将运行所有3个测试.

有没有办法将此行为更改为AND条件而不是OR?

我目前正在运行v2.5.0.9122.

提前致谢.

小智 18

根据文档,你只需说/包括:CatA + CatB

http://www.nunit.org/index.php?p=consoleCommandLine&r=2.5.1

指定要包括或排除的测试类别

NUnit提供CategoryAttribute,用于将测试标记为属于一个或多个类别.可以使用/ include和/ exclude选项在测试运行中包含或排除类别.以下命令仅运行BaseLine类别中的测试:

nunit-console myassembly.dll/include:BaseLine以下命令运行除Database类别中的测试之外的所有测试:

nunit-console myassembly.dll/exclude:数据库可以在任一选项上指定多个类别,使用逗号分隔它们.

注意:从NUnit 2.4开始,可以在命令行上组合/ include和/ exclude选项.使用两者时,除了具有排除类别的测试外,将运行包含所有类别的所有测试.

从NUnit 2.4.6开始,您可以使用以下任一选项的类别表达式:

  • A | B | C选择具有A,B或C类别的测试.
  • A,B,C选择具有A,B或C类别的测试.
  • A + B + C仅选择分配了所有三个类别的测试
  • A + B | C选择A和B OR与C类的测试.
  • A + BC选择A和B但不是C的测试.
  • -A选择未分配A类的测试
  • A +(B | C)选择同时具有A类和B或C的测试.逗号运算符等同于| 但是有更高的优势.评估顺序如下:

    一元排除运算符( - )高优先级联合运算符(,)交集和集合减法运算符(+和二进制 - )低优先级联合运算符(|)注意:因为运算符字符具有特殊含义,所以应该避免创建一个类别在它的名字中使用它们中的任何一个.例如,类别"db-tests"无法在命令行上使用,因为它似乎意味着"运行类别db,但类别测试除外".同样的限制适用于对您正在使用的shell具有特殊含义的字符.


Mik*_*Two 16

不可以.只能运行属于两个或更多特定类别的测试.老实说,几年前我们第一次使用这个功能时,我从没想过这个.我们尽量保持简单.

顺便说一句,您不需要[Test]test3方法上指定两次.

[Test]
[Category("catA")]
[Category("catB")]
public void test3
{
    //
}
Run Code Online (Sandbox Code Playgroud)

并不是说它有所作为.这只是一种风格偏好.

  • 此页面的查看者应注意,此答案现已过时。现在可以了 - [请参阅此答案](/sf/answers/1332524021/)。我只是提到它,因为我几乎错过了它。 (2认同)

Evg*_*kov 7

2019 年 NUnit 3.0 的快速答案。可以使用多个类别。

考虑以下示例:


    [TestFixture]
    public class Tests1
    {
        [Test]
        [Category("A")]
        public void TestA()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("B")]
        public void TestB()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("C")]
        public void TestC()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("A")]
        [Category("B")]
        public void TestAB()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("A")]
        [Category("C")]
        public void TestAC()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("B")]
        [Category("C")]
        public void TestBC()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }

        [Test]
        [Category("A")]
        [Category("B")]
        [Category("C")]
        public void TestABC()
        {
            Console.WriteLine(TestContext.CurrentContext.Test.Name);
        }
    }

Run Code Online (Sandbox Code Playgroud)

您可以运行两种类别的测试A,并B和排除类C使用此命令的参数:--where="cat==A && cat==B && cat!=C"

在此处输入图片说明

或者,你可以与任何类型的运行测试A,并B和排除C这样的:--where="(cat==A || cat==B) && cat!=C"

在此处输入图片说明


小智 5

如果您使用 3.0 版本,请使用该选项--where。例子:

nunit3-console.exe youdll.dll --where="cat==yourCat"
Run Code Online (Sandbox Code Playgroud)