簡體   English   中英

有沒有辦法將代理傳遞給NUnit TestCase或TestFixture?

[英]Is there a way to pass delegates to a NUnit TestCase or TestFixture?

基本上我希望能夠將方法插入到NUnit中的TestCase或TestFixture來改變行為。 本質上我想這樣做:

[TestFixture]
public class MethodTests
{
    public delegate void SimpleDelegate();

    public static void A()
    {
        // Do something meaningful
    }

    public static void B()
    {
        // Do something meaningful
    }

    public static void C()
    {
        // Do something meaningful
    }

    [TestCase(A,B,C)]
    [TestCase(C,A,B)]
    [TestCase(C,B,A)]
    public void Test(SimpleDelegate action1, SimpleDelegate action2, SimpleDelegate action3 )
    {
        action1();
        action2();
        action3();
    }
}

我收到的[TestCase(A,B,C)]的錯誤是

  • 錯誤6參數1:無法從'方法組'轉換為'對象'
  • 錯誤7參數2:無法從“方法組”轉換為“對象”
  • 錯誤8參數3:無法從'方法組'轉換為'對象'

你知道是否有辦法讓這個或類似的東西工作?

這是TestCaseSourceAttribute拯救的地方。

首先,定義一個包含測試用例列表的對象數組。 接下來,通過引用對象數組作為Test[TestCaseSource]來調用測試用例。 這應該按照您的意圖構建和運行。

private static readonly object[] TestCases =
{
    new SimpleDelegate[] { A, B, C },
    new SimpleDelegate[] { C, A, B },
    new SimpleDelegate[] { C, B, A }
};

[Test, TestCaseSource("TestCases")]
public void Test(SimpleDelegate action1, SimpleDelegate action2, 
                 SimpleDelegate action3)
{
    action1();
    action2();
    action3();
}

如果需要更復雜的參數列表,可以使用Tuple而不是SimpleDelegate[]來創建強類型參數列表。

建立在安德斯的好答案上:

您可以使用NUnit TestCaseData類型而不是Delegates數組。

這有幾個優點。 首先,您可以將多種類型的參數傳遞給測試方法。 (在這種情況下不需要,但在我的情況下它很有幫助。)其次,您可以向TestCaseData對象添加更多屬性。 在我的例子中,我使用.SetName為每個測試用例添加一個名稱,以便NUnit GUI清楚地識別正在運行的測試用例。 要修改Anders的示例:

private static readonly object[] TestCases =
{
    new TestCaseData( A, B, C ).SetName("A B C"),
    new TestCaseData( C, A, B ).SetName("C A B"),
    new TestCaseData( C, B, A ).SetName("C B A")
};

[Test, TestCaseSource("TestCases")]
public void Test(SimpleDelegate action1, SimpleDelegate action2, SimpleDelegate action3)
{
    action1();
    action2();
    action3();
}

正如Anders所提到的,可以使用Tuples來支持更復雜的參數列表; 但我的項目是在.Net 3.5中,它不支持元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM