我正在将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生成的
答案 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;
}