12

NUnit TestCaseSource pass value to factoryおよび How to pass dynamic objects into an NUnit TestCase function?と同じアプローチで動的データを使用してデータ駆動型テストを行うために、TestCaseSource 属性を持つ NUnit を使用しています。

いずれの場合も、IEnumerable < TestCaseData > を使用してデータを指定します。NUnit のドキュメント ( http://nunit.org/index.php?p=testCaseSource&r=2.5 ) から、これは TestCase と同じクラスの静的メンバーまたはインスタンス メンバーである必要があることがわかります。

同じ TestCaseSource 属性を使用したいので、これを別のクラスにリファクタリングしたいと思います。これが可能かどうか誰にもわかりますか?

4

3 に答える 3

19

Robert はすでに回答していますが、C# の新機能を使用して回答を改善しようと思います。

public static class TestCasesData 
{ 
      private static string[] TestStringsData() 
      {
           return new string[] {"TEST1", "TEST2"};
      }
      private static string[] TestIntsData() 
      {
           return new in[] { 1, 2};
      }
}
[TestFixture]
public class MyTest
{
    [Test]
    [TestCaseSource(typeof(TestCasesData ), nameof(TestCasesData .TestStringsData))]
    public void TestCase1(...)
    {
    }

    [Test]
    public void TestCase2(
      [ValueSource(typeof(TestCasesData), "TestIntsData")] int testData,
    )
    {
    }
}
于 2016-08-26T11:26:14.193 に答える
3

NUnit が TestCaseSource をテストと同じクラスにする必要がある場合、最も簡単な方法は、そのメソッドに共通メソッドを呼び出させることです。その後、詳細を別の場所に保持できるため、コードの重複を最小限に抑えることができます。

たとえば、各テスト クラスには次のものがあります。

IEnumerable LocalSource()
{
    return CommonSource.GetData();
}

CommonSource クラスは、テストに必要なデータをロードする別のクラスになります。

于 2011-06-07T14:34:23.680 に答える