从NUnit 3.0属性中的TestCaseSource检索随机数据样本不起作用?

时间:2016-10-17 16:13:01

标签: c# visual-studio nunit

我在使用这种技术组合时遇到了一个奇怪的问题:

  • NUnit的(3.4.1.0)
  • NUnit 3 Visual Studio测试适配器
  • TestCaseSource属性

我的测试使用如下属性:

        [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()没有运行单个测试?

1 个答案:

答案 0 :(得分:2)

简短回答:这是在VS适配器下运行的限制。您不能使用任何随机值或随机选择数据,除非NUnit本身通过TestContext提供随机数。

(很多)更长的回答:https://github.com/nunit/nunit3-vs-adapter/issues/240