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的测试.逗号运算符等同于| 但是有更高的优势.评估顺序如下:
一元排除运算符( - )高优先级联合运算符(,)交集和集合减法运算符(+和二进制 - )低优先级联合运算符(|)注意:因为运算符字符具有特殊含义,所以应该避免创建一个类别在它的名字中使用它们中的任何一个.例如,类别"db-tests"无法在命令行上使用,因为它似乎意味着"运行类别db,但类别测试除外".同样的限制适用于对您正在使用的shell具有特殊含义的字符.
Mik*_*Two 16
不可以.只能运行属于两个或更多特定类别的测试.老实说,几年前我们第一次使用这个功能时,我从没想过这个.我们尽量保持简单.
顺便说一句,您不需要[Test]在test3方法上指定两次.
[Test]
[Category("catA")]
[Category("catB")]
public void test3
{
//
}
Run Code Online (Sandbox Code Playgroud)
并不是说它有所作为.这只是一种风格偏好.
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)