有什么解决方案来处理TestCaseSource的dataType吗? [Nunit框架]

时间:2019-07-20 09:49:09

标签: c# visual-studio 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.Config”类型的对象不能为   转换为类型'System.Collections.Generic.List`1 [SAP.Config]'。

2 个答案:

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