基于https://gigi.nullneuron.net/gigilabs/data-driven-tests-with-nunit/网站。我试图创建一个简单的测试用例,以备将来读取数据。但是我不知道如何处理参数并正确使用它
我尝试将其设置为对象,但是我认为这可能不是正确的解决方案
[TestCaseSource("GetDataString")]
public void TestMethod2(object configs)
{
}
这是源代码
namespace SAP
{
[TestFixture]
public class Scenario1
{
// This one Give System.ArgumentException
[TestCaseSource("GetDataString")]
public void TestMethod(List<Config> configs)
{
Console.WriteLine("Config " + configs);
}
// This one can handle an Exception
[TestCaseSource("GetDataString")]
public void TestMethod2(object configs)
{
}
public static List<Config> GetDataString()
{
var datas = new List<Config>();
datas.Add(new Config("Nick", "Coldson"));
return datas;
}
}
public class Config
{
public string NickName { get; set; }
public string Name { get; set; }
public Config(string nickname, string name)
{
NickName = nickname;
Name = name;
}
}
}
这是错误消息
System.ArgumentException:“ SAP.Config”类型的对象不能为 转换为类型'System.Collections.Generic.List`1 [SAP.Config]'。
答案 0 :(得分:2)
testcase源的定义模式略有不同。假设您使用nunit 3,它应该是:
[TestCaseSource(typeof(MyTestData), nameof(GetDataString))]
public void TestMethod2(List<Config> configs)
{
...
}
public class MyTestData
{
public static IEnumerable GetDataString()
{
var datas = new List<Config>();
datas.Add(new Config("Nick", "Coldson"));
return new TestCaseData(datas);
}
}
有关更多信息,请查看文档: https://github.com/nunit/docs/wiki/TestCaseData
答案 1 :(得分:2)
您的GetDataString
返回一个List<Config>
。
这意味着,带有[TestCaseSource("GetDataString")]
的测试方法将执行与列表中的项目一样多的次数,并且您的方法必须与项目类型匹配。
//// This one throws System.ArgumentException
//[TestCaseSource("GetDataString")]
//public void TestMethod(List<Config> configs)
//{
// Console.WriteLine("Config " + configs);
//}
// This one is ok
[TestCaseSource("GetDataString")]
public void TestMethod(Config config)
{
Console.WriteLine(config);
}
如果您需要在测试中获得List<Config>
个实例,那么您的源必须返回一些包含列表项的集合。