• Как использование Moq для тестирования репозиториев?

    Milk92
    @Milk92
    .NET
    Вкуривайте.
    public UserController :Controller
    { 
       private IUserRepository _userRepository;
    public UserController( IUserRepository _userRepository)
    {
    this._userRepository = _userRepository;
    }
       
    public ViewResult GetUsers(int count)
    {
    var users = _userRepository.GetAll().Take(count);
    
    return View(users);
    }
    
    }

    [TestMethod]
    public void GetFiveUsers()
    {
    //organization
      Mock<IUserRepository> mock = new Mock<IUserRepository>();
      mock.Setup(x=>x.Users).Returns(new List<Users>{
      new User{ Id = Guid.NewGuid(),Name="User#1"},
      new User{ Id = Guid.NewGuid(),Name="User#2"},
      new User{ Id = Guid.NewGuid(),Name="User#3"},
      new User{ Id = Guid.NewGuid(),Name="User#4"}
    }); 
    //action
    UserController controller = new UserController(mock.Object);
    IEnumerable<User> usersResult = (IEnumerable<User>)controller.GetUsers(3).Model;// return type action method: ViewResult
    //assertion
    List<Users> users = usersResult.ToList();
    Assert.IsTrue(users.Count()==3);
    Assert.AreEqual(users[0].Name, "User#1");
    Assert.AreEqual(users[1].Name ,"User#2");
    Assert.AreEqual(users[2].Name, "User#3");
    }
    Ответ написан
  • Как вызвать метод GET с параметрами?

    Milk92
    @Milk92
    .NET
    Используйте DTO классы - модели представления.
    В чем проблема зашить ваши строковые параметры в свойства модели представления?
    Использование ViewBag не совсем думаю успешное решение.
    Ответ написан
  • Часто ли вы используете интерфейсы?

    Milk92
    @Milk92
    .NET
    Я отталкиваюсь от понимания полиморфизма.. то есть многообразия форм объекта (интерфейсной ссылки). Об этом написано в любой книге по языку C# и по любому другому языку с парадигмой ООП..
    Тут самому нужно понимать когда его использовать..
    Например если у вас не один источник а два.. то нужно разработать API которое дает методы, работы с данными независимо от источника..
    То есть:
    public interface IDataAccess{
    void Connection();
    void BeginTransaction();
    
    }
    public class MySqlDal:IDataAccess{
          public void Contection(){
             //TODO implement method!
        }
         public void BeginTransaction(){
           //TODO implement method!
        }
    }
    public class MsSqlDal:IDataAccess{
          public void Contection(){
             //TODO implement method!
        }
         public void BeginTransaction(){
           //TODO implement method!
        }
    }

    А дальше уже использовать так:
    public IDataAccess mySqlDal = new MySqlDal();
    public IDataAccess msSqlDal = new MsSqlDal();

    понимаю, что грубый пример но как то вот так.
    Ответ написан
    Комментировать