c# - 将假数据作为参数传递给 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 次:-
- 第一个带参数
("","TestPassword")
- 第二个带参数
("TestUser","")
并且忽略使用来自数据源数组中的第一个对象的参数运行测试,其值是使用 Faker.Net 生成的
解决方案
该问题是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 分钟后。
解决此问题的一种方法是为测试分配一个固定名称,该名称不包括这些动态参数值。
为此,请将GetInvalidLoginCredentials
from的返回类型更改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;
}