2

在一个我们使用 MvcMailer 的新项目中,它很棒,我想知道如何使用 Rhino 和 NUnit 对其进行测试?SO上有另一个帖子和一个很好的Wiki页面,但这不是我想要的。对于我的控制器,我通常使用MvcContrib 的 Testhelper对其进行测试

  • 我首先尝试模拟邮件程序类,但如果这样做,我无法验证我的 ViewBag 数据,我的 PopulateBody 方法有问题,我必须构建自己的 IMailerBase 接口
  • 在此之后,我尝试像使用 MvcContrib 使用控制器一样测试邮件程序,但它只接受 InitializeController() 中的控制器对象,因此它不起作用。
  • MailerBase.cs 类中还有一个 IsTestModeEnabled 属性,但是当我对其进行测试时,我在空 URI 上出现错误。

不知道什么是最好的方法,我正在寻求帮助,谢谢大家!

4

1 回答 1

4

这是我如何做到的代码:

// 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());

如您所见,您可以使用 Rhino 的 partialMock 功能来实现它。

于 2011-06-13T16:16:58.253 回答