Dot-Net

NUnit 類別組合?

  • July 29, 2009

在我的 NUnit testfixtrues 中,我有一些類似的東西

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

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

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

現在在 NUnit gui 中,我希望能夠選擇 catA 和 catB 並執行存在 catAcatB 的測試。目前情況並非如此,NUnit 將執行所有 3 個測試。

有沒有辦法將此行為更改為 AND 條件而不是 OR?

我目前正在執行 v2.5.0.9122。

提前致謝。

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

您可以使用以下命令參數執行包含類別AB排除類別的測試:C``--where="cat==A && cat==B && cat!=C"

在此處輸入圖像描述

或者您可以使用任何類別執行測試,AB排除C如下:--where="(cat==A || cat==B) && cat!=C"

在此處輸入圖像描述

根據文件,您只需說 /include: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 以下命令執行除數據庫類別之外的所有測試:

nunit-console myassembly.dll /exclude:Database 可以在任一選項上指定多個類別,使用逗號分隔它們。

注意:從 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 的測試或帶有類別 C 的測試。
  • A+BC 選擇同時包含 A 和 B 但不包含 C 的測試。
  • -A 選擇沒有分配類別 A 的測試
  • A+(B|C) 選擇具有 A 類和 B 或 C 的測試 逗號運算符等價於 | 但優先級更高。評價順序如下:

一元排除運算符 (-) 高優先級聯合運算符 (,) 交集和減法運算符(+ 和二進制 -) 低優先級聯合運算符 (|) 注意:由於運算符字元具有特殊含義,因此應避免創建一個類別在它的名字中使用它們中的任何一個。例如,不能在命令行上使用類別“db-tests”,因為它似乎意味著“執行類別 db,類別測試除外”。同樣的限制適用於對您使用的 shell 具有特殊含義的字元。

引用自:https://stackoverflow.com/questions/1199611