首页 > 解决方案 > 将假数据作为参数传递给 NUnit 测试方法

问题描述

我正在将 NUnit 与 C# 和 Faker.NET 库一起使用,有没有办法将 Faker.NET 生成的假数据作为我的测试方法的参数传递?

编辑:

public static object[,] GetInvalidLoginCredentials()
    {
        object[,] FD = { { new object[] { Name.First(), Internet.Password(10, 12) }, new object[] { "TestUser", "" }, new object[] { "", "TestPassword" } } };
        return FD;
    }

 [Test, Order(1), TestCaseSource("GetInvalidLoginCredentials")]        
    public void InvalidLogin(string userName, string password)
    {
         // Test case code 
    }

运行此测试时,测试运行器仅运行 2 次:-

并且忽略使用来自数据源数组中的第一个对象的参数运行测试,其值是使用 Faker.Net 生成的

标签: c#nunitfaker

解决方案


该问题是NUnit相关的(而不是Fake.NET),并且当生成的测试名称包含任何具有可以在运行之间更改的值的参数时发生。

下面的测试用例(不使用Fake.NET)会遇到同样的问题,因为DateTime每次都会发生变化。

new object[] { DateTime.Now.ToString(), "TestUser" }

此测试的(显示)名称将是:InvalidLogin("11/12/2018 20:10:59", "TestUser")但是InvalidLogin("11/12/2018 20:15:59", "TestUser")5 分钟后。


解决此问题的一种方法是为测试分配一个固定名称,该名称不包括这些动态参数值。

为此,请将GetInvalidLoginCredentialsfrom的返回类型更改Object[,]IEnumerable<TestCaseData>

该类TestCaseData具有SetName否决测试名称的方法。

TestCaseSource上面的方法如下所示,“忽略”测试现在将具有固定名称InvalidLogin-WithFakeData

    public static IEnumerable<TestCaseData> GetInvalidLoginCredentials()
    {
        TestCaseData[] FD = {                 
            new TestCaseData(Name.First(), Internet.Password(10, 12)).SetName("InvalidLogin-WithFakeData"), 
            new TestCaseData("TestUser", ""), 
            new TestCaseData("", "TestPassword")                
            };

        return FD;
    }

推荐阅读