15

基本的に、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: 'メソッド グループ' から 'オブジェクト' に変換できません

これまたはそれに似たものを機能させる方法があるかどうか知っていますか?

4

2 に答える 2

18

ここで、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[]

于 2013-08-29T06:32:58.527 に答える