2016-08-03 54 views
1

我正在努力NUnit测试,需要能够接受一个列表作为参数,我想知道如何通过该列表作为参数?通过一个列表<SomeObject>参数NUnit测试

我可以在每个用户单独传递给单元测试像这样:

[Test, TestCaseSource("GetUsers")]   
public void MyExample_Test(User user) 
{ 
    Asset.Pass(); 
} 

private static List<User>GetUsers() 
{ 
    List<User>users=new List<User>(); 
    users.Add(new User()); 
    users.Add(new User()); 
    users.Add(new User()); 
    users.Add(new User()); 

    return users; 
} 

但我需要在List<User>作为一个整体通过。

回答

2

TestCaseSource的用途是返回一个集合,集合中的每个对象都会从您的测试方法创建一个新的Test。你想传入一个集合,所以你需要将这个集合包装在一个集合中。谈论递归:)

你要像,

[Test, TestCaseSource("GetUserLists")]   
public void MyExample_Test(IList<User> users) 
{ 
    Asset.Pass(); 
} 

private static IEnumerbale<List<User>> GetUserLists() 
{ 
    IList<User> users = new List<User>(); 
    users.Add(new User()); 
    users.Add(new User()); 
    users.Add(new User()); 
    users.Add(new User()); 

    return new [] { users }; 
} 

通常情况下,你会想多个集合添加到您返回,否则在收集你不需要TestCaseSource,你只想构建您的收藏在你的测试方法中。

+0

就参数化测试而言,如果我想通过TestCase()属性传递一个集合,那我该怎么做?现在我可以传递像Enum,Int,String等基本类型,现在看起来像这样没有动态生成的集合:[TestCase(PersonType.Soldier,“John”,40,UnitTestNumber.Three)]但我想我想它看起来像这样:[TestCase(PersonType.Soldier,“John”,40,SpecificAttributeCollectionForThisTest,UnitTestNumber.Three)] SpecificAttributeCollectionForThisTest - 将是仅用于此测试的值列表。 – CloudDev

+0

您无法传递复杂对象或集合,因为属性参数必须是const –