модульное тестирование в MVC3 - PullRequest
       1

модульное тестирование в MVC3

0 голосов
/ 09 сентября 2011

Я работаю над внешним интерфейсом MVC3. У нас есть проект инфраструктуры, который является мостом между пользовательским интерфейсом и веб-службой. Но инфраструктура еще не готова. У меня есть виды, просмотр моделей, контроллеров, как показано ниже. Я должен сделать юнит-тестирование. Я должен передать свою модель представления инфраструктуре, чтобы она добавляла, сохраняла функциональность. Откуда я передаю модель в инфраструктуру? Это в контроллере? Если так, то как? Пожалуйста, предоставьте мне класс, который будет выполнять модульное тестирование для данного представления, viewmodel, controller. Меня попросили смоделировать мою модель представления, поскольку инфраструктура и веб-служба еще не готовы, чтобы я мог провести некоторое тестирование.

ViewModel

    public class BuildRegionModel : IBuildRegionModel
    {
    #region Constructor / Desctructor
    public BuildRegionModel()
    {
        Name = "User123";
        Description = "Long text";
        ModifyUser = new User();
        ModifyUser.FirstName = "First Name";
        StatusSelected = new Status();
        ModifyDate = DateTime.Today;
        StatusLists = new List<ICode>();
        StatusLists.Add(new Status("A","Active"));
        StatusLists.Add(new Status("I", "InActive"));
    }

    ~BuildRegionModel()
    {
        StatusLists = null;
        StatusSelected = null;
    }
    #endregion

    #region Properties

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public List<ICode> StatusLists { get; set; }
    public ICode StatusSelected { get; set; }
    public IUser ModifyUser { get; set; }
    public DateTime ModifyDate { get; set; }        
    #endregion
}

Контроллер

public class BuildRegionController : Controller
{
    public ActionResult Index(BuildRegionModel model)
    {
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(BuildRegionModel model, string button)
    {

        if (button == "Add")
            {

            }
        if (button == "Save")
            {

            }
        if (button == "Cancel")
            {
                return RedirectToAction("Index", "Home");
            }
        return View(model);
    }

}

В этом сценарии я ищу тестовый класс, чтобы продолжить с другими.

1 Ответ

2 голосов
/ 09 сентября 2011

Если ваша модель действительно ViewModel (или в вашем данном контексте я склонен называть их EditModel), вы не должны передавать их на другой слой (не уверен, какое у вас здесь определение инфраструктуры).

Иногда мой контроллер передает объект реального бизнес-уровня моей EditModel и позволяет EditModel обновлять бизнес-объект.Я делаю это двунаправленно, EditModel будет проецировать или извлекать данные из реальной модели перед отправкой в ​​представление.

Я делаю это для того, чтобы мои методы контроллера были короткими и чтобы в коде не было большого количества лево-правого отображенияих.

Любое поведение (усложняющее их простыми мутациями) или служебные вызовы, которые я сохраняю в моем контроллере (например, Сохранение или добавление вызовов для некоторого репозитория).

Что вы можете выполнить модульным тестом:

  • Правильно ли ViewModel изменяет модель (инфраструктура или бизнес)?

  • При заданном значении параметров кнопки контроллер вызывает соответствующий метод в инфраструктуре(вам нужно определить интерфейс для инфраструктуры и смоделировать его).

  • Возвращает ли контроллер правильный ActionResult с правильными данными модели?

  • Возвращает ли контроллер правильный ActionResult, когда ViewModel не проверяет или когда (инфраструктура? Или бизнес) модель отклоняет изменение.

Рассматривали ли вы создание Сохранить, Добавитьи отменить метод на вашем контроллере?Это может помочь как в тестируемости, так и в читабельности, если вы не направляете все через метод Index.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...