2014-02-18 4 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 для различных users и roles, которая будет высыхать ваш код.

Смежные вопросы