2017-08-11 11 views
0

およびTestCaseSourceのようなものをhereとし、TestCaseSourceについて次の質問があります。テストコードは次のとおりです。c#nunit TestCaseSourceは、テスト実行ごとに一意のテストデータを提供することはできません

[Test, TestCaseSource("TestData")] 
void Test1(string uniqueId){...} 

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = "myString";   
    yield return new TestCaseData(uniqueId); 
} 

、その後TestCaseSource作品やユニークID変数とTest1実行されますが、テストコードは次のとおりです。

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = Guid.NewGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId); 
} 

そしてTestCaseSourceが表示されますが細かい戻りながら、 Test1は実行されません。コメントしてください。

+1

これをデバッグしましたか? 'TestData'メソッドが実際に' TestCaseData'を返すのは確かですか? 'uinquetId'をデバッグしよう。 – HimBromBeere

答えて

1

のNUnitのランダムクラスは、この問題を解決する必要があります使用します。

この問題は、テスト名がTestCaseDataのパラメータを使用して作成されていることです。状況によっては(たとえば、VS Test Adapterを使用している場合など)、TestCaseSourcesは複数回列挙されます。同じ名前のテストが再び見つからない場合は、問題が起こります。このため、手動で名前を設定すると問題が解決されます。

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = TestContext.CurrentContext.Random.NextGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId); 
} 
:(!、一般的に、おそらく、とにかくランダムデータを使用して、任意のテストのために良いアイデアです)

あなたはNUnitのランダムなクラスを使用する場合は、ランダムな値を播種し、反復可能である

はこれを試してみてください

NextGuid()メソッドは、月末にリリースされるNUnit 3.8の一部です。今のところ、NuGetではなくMyGetフィードからパッケージを入手できます:https://www.myget.org/F/nunit/api/v2

0

次のように私は.SetName("myName")を追加する場合、それは動作します:

private static IEnumerable<TestCaseData> TestData() 
{ 
    string uniqueId = Guid.NewGuid().ToString().Substring(0, 8); 
    yield return new TestCaseData(uniqueId) 
    .SetName("myTest"); 
} 
関連する問題