MvcMailer модульный тест с Rhino Mock, как? - PullRequest
2 голосов
/ 13 апреля 2011

В новом проекте мы используем MvcMailer, это здорово, и я хотел бы знать, как я могу протестировать его, используя Rhino и NUnit? Есть еще один пост на SO и хорошая вики-страница , но это не то, что я ищу. Для моих контроллеров я обычно тестирую их с помощью Mhelc Testrib's Testhelper

  • Сначала я пытаюсь смоделировать класс почтовой программы, но если я делаю это, я не могу проверить свои данные ViewBag, у меня возникают проблемы с методом PopulateBody, и я должен создать свой собственный интерфейс IMailerBase
  • После этого я пытаюсь проверить почтовую программу, как я это делаю с контроллером, использующим MvcContrib, но он принимает только объект Controller в InitializeController (), поэтому он не работает.
  • В классе MailerBase.cs есть также свойство IsTestModeEnabled, но когда я проверяю его, я получаю сообщение об ошибке на пустом URI.

Не знаю, как лучше это сделать, и я ищу помощи, спасибо всем!

1 Ответ

4 голосов
/ 13 июня 2011

Вот код, как я это сделал:

// arrange
    var passwordMailer = MockRepository.GeneratePartialMock<PasswordMailer>();
    passwordMailer.Stub(mailer => mailer.PopulateBody(Arg<MailMessage>.Is.Anything, Arg.Is("ForgotPassword"), Arg<string>.Is.Null, Arg<Dictionary<string, string>>.Is.Null));

    // act
    var mailMessage = passwordMailer.ForgotPassword("test@example.com", "4454-8838-73773");

    // assert
    Assert.AreEqual(string.Format(Login.mailBody, "4454-8838-73773"), passwordMailer.ViewBag.Body);
    Assert.AreEqual(Login.mailSubject, mailMessage.Subject);
    Assert.AreEqual("test@example.com", mailMessage.To.First().ToString());

Как вы можете видеть, вы можете добиться этого, используя функционалpartMock от Rhino.

...