我在使用这种技术组合时遇到了一个奇怪的问题:
我的测试使用如下属性:
[Test, TestCaseSource(nameof(GetSmallSampleSizeOfTestDataForScratchwork))]
public void TestMe(string accessionNumber, string loginId)
{
var studentAssessmentPage = OpenAdminResetPageAndGoToBookletLocation(accessionNumber, loginId);
studentAssessmentPage.OpenScratchworkTool();
Assert.IsTrue(studentAssessmentPage.IsScratchworkToolOpen(), "The scratchwork tool did not open succesfully.");
}
每当我尝试执行测试时,GetSmallSampleSizeOfTestDataForScratchwork()的实现都不会运行任何测试。即使在调试模式下,它也可以按预期工作。
protected static IEnumerable<string[]> GetSmallSampleSizeOfTestDataForScratchwork()
{
var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
filePath = Path.GetFullPath(filePath + @"\TestData\TestData.csv");
using (var sr = new StreamReader(filePath))
{
var reader = new CsvReader(sr);
IEnumerable<CsvRecord> records = reader.GetRecords<CsvRecord>().OrderBy(x => Guid.NewGuid());
foreach (var record in records.Take(10))
{
string column1 = record.AccessionNumber;
string column2 = record.LoginId;
yield return new[] { column1, column2 };
}
}
}
但是,这个实现工作正常并且运行所有测试没有问题。
protected static IEnumerable<string[]> GetAllTestDataForScratchwork()
{
var filePath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
filePath = Path.GetFullPath(filePath + @"\TestData\TestData.csv");
using (var sr = new StreamReader(filePath))
{
var reader = new CsvReader(sr);
IEnumerable<CsvRecord> records = reader.GetRecords<CsvRecord>();
foreach (var record in records)
{
string column1 = record.AccessionNumber;
string column2 = record.LoginId;
yield return new[] { column1, column2 };
}
}
}
这两种方法之间的唯一区别是1返回一个随机数据子集,另一个返回所有数据。
因此,为什么GetAllTestDataForScratchwork()在我执行测试时运行正常并且GetSmallSampleSizeOfTestDataForScratchwork()没有运行单个测试?
答案 0 :(得分:2)
简短回答:这是在VS适配器下运行的限制。您不能使用任何随机值或随机选择数据,除非NUnit本身通过TestContext提供随机数。
(很多)更长的回答:https://github.com/nunit/nunit3-vs-adapter/issues/240