c #nunit TestCaseSource无法为每次测试运行提供唯一的测试数据

时间:2017-08-11 12:29:07

标签: c# nunit

我正在使用nunit <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <td id="tabledata"> <div id="text_fields"> <label style="font-weight:normal"><input name="resp'+value.installment_number+'" type="radio" id="textbox" class="textbox">Text Box</label> <label style="font-weight:normal"><input name="resp'+value.installment_number+'" type="radio" id="fileupload" class="fileupload">Upload File</label> </div> </td>TestCase here,并对TestCaseSource提出以下问题。当测试代码是:

TestCaseSource

然后[Test, TestCaseSource("TestData")] void Test1(string uniqueId){...} private static IEnumerable<TestCaseData> TestData() { string uniqueId = "myString"; yield return new TestCaseData(uniqueId); } 工作,TestCaseSource运行uniqueId变量,但当测试代码为:

Test1

然后当private static IEnumerable<TestCaseData> TestData() { string uniqueId = Guid.NewGuid().ToString().Substring(0, 8); yield return new TestCaseData(uniqueId); } 似乎返回正常时,TestCaseSource不会运行。请评论。

2 个答案:

答案 0 :(得分:2)

使用NUnit的随机类应该可以解决这个问题。

此问题是使用TestCaseData参数创建测试名称。在某些情况下(例如,如果您使用的是VS测试适配器),TestCaseSources会被多次枚举。如果再次找不到相同名称的测试 - 则会出错。这就是为什么手动设置名称可以解决问题。

如果您使用NUnit随机类,那么随机值是种子和可重复的(无论如何,对于任何使用随机数据的测试来说,这通常都是个好主意!)

试试这个:

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

请注意,NextGuid()方法是NUnit 3.8的一部分,该方法将在月底发布。目前,您可以从MyGet Feed获取包,而不是NuGet:https://www.myget.org/F/nunit/api/v2

答案 1 :(得分:0)

如果我按如下方式添加.SetName("myName"),则有效:

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