将伪数据作为参数传递给NUnit测试方法

时间:2018-11-29 10:35:27

标签: c# nunit faker

我正在将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次:-

  • 第一个参数为("","TestPassword")
  • 第二个参数为("TestUser","")

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

1 个答案:

答案 0 :(得分:0)

此问题与NUnit相关(而不与Fake.NET相关),并且在generated testname包含任何值可以在运行之间改变的参数时发生。

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

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

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


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

为此,请将GetInvalidLoginCredentials的返回类型从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;
    }