NUnit类别组合?

时间:2009-07-29 11:35:51

标签: .net unit-testing tdd nunit

在我的NUnit testfixtrues中,我有一些类似

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

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

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

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

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

我目前正在运行v2.5.0.9122。

提前致谢。

7 个答案:

答案 0 :(得分:18)

基于文档,您只需说/ include:CatA + CatB

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

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

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

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

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 + B-C选择A和B但不是C的测试。
  • -A选择未分配A类的测试
  • A +(B | C)选择同时具有A类和B或C的测试 逗号运算符等效于|但是有更高的优势。评估顺序是 如下:

    一元排除运算符( - )高优先级联合运算符(,) 交集和集合减法运算符(+和二进制 - ) 低优先级联合运算符(|)注意:因为运算符 字符有特殊含义,你应该避免创建一个类别 在其名称中使用其中任何一个。例如,类别 “db-tests”无法在命令行上使用,因为它似乎是 表示“运行类别db,类别测试除外”。相同 限制适用于具有特殊含义的字符 你正在使用的shell。

答案 1 :(得分:15)

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

顺便说一句,您无需在[Test]方法上指定test3两次。

[Test]
[Category("catA")]
[Category("catB")]
public void test3
{
    //
}

并非它有所作为。这只是一种风格偏好。

答案 2 :(得分:4)

如果使用3.0版,请使用选项--where。 例如:

nunit3-console.exe youdll.dll --where="cat==yourCat"

答案 3 :(得分:3)

从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);
        }
    }

您可以使用以下命令参数A来同时对类别BC进行测试,并排除类别--where="cat==A && cat==B && cat!=C"

enter image description here

或者您可以使用类别AB中的任何一个运行测试,并且排除C这样的类别:--where="(cat==A || cat==B) && cat!=C"

enter image description here

答案 4 :(得分:2)

听起来你需要的是第三类“catAandB”。

答案 5 :(得分:1)

据我所知,你不能像NUnit那样选择它们。

我尝试了NUnit的许多不同的东西,以及我的测试创建方式没有成功。

我找到了一个site,它会告诉您创建自定义类别属性的过程,但仍然无法看到它可能有何帮助。

答案 6 :(得分:0)

"...nunit-console.exe" "....myassembly.dll" /include:catA+catB