Конкретная бизнес-логика POCO для тестов контроллеров - PullRequest
0 голосов
/ 10 января 2012

Допустим, у меня есть следующий контроллер:

    //
    // GET: /Courses/Edit/5
    public ActionResult Edit(int id)
    {
        Course course = courseService.GetCourseByID(id);
        if (course != null && course.userCanAccess())
        {
            // Do stuff...
        }
    }

Оператор if разработан как простая проверка, позволяющая пользователю выполнить действие.Сам объект «Курс» предоставляет логику для определения, может ли пользователь получить к ней доступ.Это работает хорошо, но приводит меня к проблеме: как проверить контроллер.

Мне нужен способ, чтобы course.userCanAccess () возвращал конкретный результат в моем тесте контроллера.Мои POCO-объекты не имеют интерфейсов, поэтому я не верю, что могу их издеваться (пожалуйста, исправьте меня, если это не так).

Я думаю, что я мог бы просто создать полный объект Couse для теста, который настроентак что userHasAccess () вернет то, что я хочу, но метод полагается на то, что некоторые связанные сущности курса «гидратированы» и поэтому могут стать рутиной для подключения.

Я новичок в тестировании, поэтому не уверен, какпродолжить.

Ответы [ 2 ]

2 голосов
/ 10 января 2012

Вы можете издеваться над ними, если у них есть методы, которые вы хотите имитировать, помеченные как виртуальные.

0 голосов
/ 10 января 2012

POCOs не должно содержать бизнес-логики. Это " Обычные старые объекты CLR ".

Ваша бизнес-логика должна быть на уровне обслуживания, который вы можете внедрить в свой контроллер.

Если вам нужно добавить дополнительные свойства к вашему POCOs, это нормально (пометьте их как [NotMapped]), или вы можете (и должны) использовать ViewModels, это то, что Дарин Димитров вероятно скажу вам!

Вы правы, считая, что POCOs не требует интерфейсов. Действительно, использование интерфейсов для POCOs делает использование навигационных свойств EntityFramework практически невозможным (но на самом деле это невозможно, я сделал это, хотя и очень дурацким, хакерским способом).

Я могу ответить более подробно позже, но сейчас мне нужно вернуться домой к жене и ребенку!

...