MVC3 Moq акаунт контролер c# nUnit

Опитвам се да науча Moq, но се оказва малко трудно.

Ако искам да внедря някои основни тестове, използвайки nUnit и Moq за контролера на акаунта в нов MVC3 проект, как да го направя?

Свикнал съм с рамката на обекта. но не и изграждане на интерфейси за него.

редакция: Разбирам теорията на всичко това и необходимостта да го направя, но прилагането му ме обърква

Използвам генератор на код на обект (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