有没有任何解决方案来处理TestCaseSource的数据类型?[Nunit 框架]



基于 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'的对象。配置"不能 转换为类型'System.Collections.Generic.List'1[SAP.配置]'。

testcasesource 的定义模式略有不同。假设您使用 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

您的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>实例,则源必须返回一些包含列表项的集合。

最新更新