2016-03-29 14 views
0

私は方法があり、私は2つのデータソース(私の場合は2つのリスト)でテストしたいと思います。 誰かがそれを正しくする方法を手伝って説明することができますか? 属性TestCaseSourceを使用する必要がありますか?複数のデータソースを使用してユニットテストを作成するにはどうすればよいですか?

public void TestMethodIntToBin(int intToConvert, string result) 
    { 
     Binary converter = new Binary(); 
     string expectedResult = converter.ConvertTo(intToConvert); 
     Assert.AreEqual(expectedResult, result); 
    } 

public List<int> ToConvert = new List<int>() 
    { 
     12, 
     13, 
     4, 
     64, 
     35, 
     76, 
     31, 
     84 
    }; 
    public List<string> ResultList = new List<string>() 
    { 
     "00110110", 
     "00110110", 
     "00121011", 
     "00110110", 
     "00110110", 
     "00100110", 
     "00110110", 
     "00110110" 
    }; 

答えて

3

まず、データソースを静的にする必要があります。これはNUnit 3の要件です。

これを実行したら、各パラメータにValueSource attributeを使用できます。例えば、

[Test, Sequential] 
public void TestMethodIntToBin([ValueSource(nameof(ToConvert))] int intToConvert, 
           [ValueSource(nameof(ResultList))] string result) 
{ 
    // Asserts 
} 

Sequential attributeあなたはNUnitのは、順序で値を選択することで、テストケースを生成することを指定します。他のオプションはCombinatorialであり、これはデフォルトの値のすべての組み合わせ、またはすべての可能なペアのケースを作成するだけのPairwiseです。

しかし、あなたの2つのデータソースを1つにマージし、TestCaseSource attributeを使用することをお勧めします。あなたは、Visual Studio 2015を使用していない場合、私はC#6用がNameOf()演算子を使用しています

[TestCaseSource(nameof(Conversions))] 
public void TestMethodIntToBin(int intToConvert, string result) 
{ 
    // Asserts 
} 

static object[] Conversions = { 
    new object[] { 12, "00110110" }, 
    new object[] { 13, "00110110" } 
} 

注、文字列だけに切り替えます。

+0

この場合のために、おそらく単純別の代替、: [TestCaseSource(がNameOf(変換))] 公共ボイドTestMethodIntToBin(INT intToConvert、文字列結果) { //アサート } 静的オブジェクト[]コンバージョン= { 新しいオブジェクト[] {12、 "00110110"}、 新しいオブジェクト[] {13、「00110110 "} } – Charlie

+0

先に無視して編集しています。 – Charlie

3

私はこのサイトのコメントにコードを付けることができないので、実際にはRobの答えにコメントしていますが、これを別の回答として投稿しています。

あなたの特定のケースでは、あなたはこの考えてみましょう...全然TestCaseSourceを必要としない:

[TestCase(12, "00110110")] 
[TestCase(13, "00110110")] 
public void TestMethodIntToBin(int intToConvert, string result) 
{ 
    // Asserts 
} 
+0

Charlieが述べているように、これはおそらくあなたが投稿したサンプルコードのための最も簡単な構文です。これは、テストコードが動的に生成されたり、外部システムから取得されない限り、推奨される方法です。 –

関連する問題