Контроллер учетных записей MVC3 Moq С# nUnit

Я пытаюсь изучить Moq, но это оказывается довольно сложно.

Если я хочу реализовать некоторые базовые тесты с использованием nUnit и Moq для контроллера учетных записей в новом проекте MVC3, как мне это сделать?

Я привык к структуре сущности. но не создавать интерфейсы для него.

edit: я понимаю теорию всего этого и необходимость этого делать, но реализация этого сбивает меня с толку

Я использую генератор кода сущности (dbContext) для генерации кода, который я могу использовать для интерфейсов.


person JustAnotherDeveloper    schedule 20.09.2011    source источник


Ответы (1)


Хорошо, вот хороший тест: когда вы регистрируете нового пользователя, вы хотите убедиться, что он будет автоматически авторизован на сайте, поэтому ему не нужно будет снова вводить свое имя пользователя и пароль.

Тест будет примерно таким:

public void AutomaticallySignedInAfterRegistering()
{
    var membershipService = new Mock<IMembershipService>();
    var formsService = new Mock<IFormsAuthenticationService>();
    RegisterModel newUser = new RegisterModel();
    newUser.UserName = "John"
    newUser.Email = "[email protected]"
    newUser.Password = "p@ss";
    newUser.ConfirmPassword = "p@ss";

    membershipService.Setup(x => x.CreateUser("John", "p@ss", "[email protected]")).Returns(MembershipCreateStatus.Success);

    AccountController controller = new AccountController();
    controller.FormsService = formsService.Object;
    controller.MembershipService = membershipService.Object;

    controller.Register(newUser);

    formsService.Verify(x => x.SignIn("John", false), Times.Once());
} 

Ключевым здесь является метод Verify. Он работает так же, как Assert. В этом случае вы проверяете, что метод SignIn был вызван ровно один раз. Это пример того, как использовать макеты, чтобы проверить, работает ли контроллер учетных записей должным образом.

person goenning    schedule 20.09.2011
comment
Спасибо, звучит как хороший тест для начала. Однако один вопрос: как проще всего создать интерфейс для моих сущностей EDMX? У меня установлен DBContext Generator, но он не создает интерфейсы, а только классы для каждой сущности (однако все правильные функции есть) - person JustAnotherDeveloper; 20.09.2011
comment
Оберните DbContext внутри пользовательского класса. Обычно я выбираю такой интерфейс, как «IDbContext», и класс с именем «EntityFrameworkDbContext». Этот класс будет внутренне использовать DbContext, созданный на EDMX. Все ваши контроллеры и сервисы будут использовать IDbContext. - person goenning; 21.09.2011