我正在使用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
不会运行。请评论。
答案 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");
}