2014-02-18 79 views
2

我有一流的示范作用:EF。惩戒的ICollection

public partial class Role 
{ 
    public Role() 
    { 
     this.Users = new HashSet<User>(); 
    } 

    public int Id { get; set; } 
    public string RoleName { get; set; } 

    public virtual ICollection<User> Users { get; set; } 
} 

而单元测试我需要模拟它。 所以我的代码:

public class RoleControllerTest 
{ 
    private IUnitOfWork fakeRepo; 
    [TestInitialize] 
    public void Initialize() 
    { 
     Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>(); 
     mock.Setup(m => m.roleRepository.Get(null)).Returns(new[]{ 
      new Role{Id=1, RoleName="Admin",MissingArgument}, 
      new Role{Id=2,RoleName="User",MissingArgument} 
     }); 
    } 
} 

我不知道如何嘲笑

public virtual ICollection<User> Users { get; set; } 

尝试空但这ALSA返回错误。 你能告诉我什么变量和什么类型,我应该通过MissingArgument

回答

2

我假设Moq - Users,不过是为了要生成假数据在您Role类属性,所以你可以继续使用对象初始化语法在嘲笑获取执行Returns对其进行初始化,像所以:

Mock<IUnitOfWork> mock = new Mock<IUnitOfWork>(); 
    mock.Setup(m => m.roleRepository.Get(It.IsAny<int>())) 
     .Returns(new[]{ 
      new Role 
      { 
      Id=1, 
      RoleName="Admin", 
      Users = new List<User> 
       { 
       new User 
       { 
        // Set SomeUserProperties Here 
       }, 
       // Add another User here if needed 
       }}, 
      new Role 
      { 
       Id=2, 
       RoleName="User" 
       // Add users here 
      } 
      } 
     ); 

如果你发现自己需要返回到多个单元测试相同的假数据,您可以创建一组常见的罐装static readonly对象或使用object mother factory各种usersroles,这将干涸你码。