MvcMailer单元测试用Rhino Mock,如何

本文关键字:如何 Mock Rhino 单元测试 MvcMailer | 更新日期: 2023-09-27 17:49:47

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

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

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

MvcMailer单元测试用Rhino Mock,如何

我是这样做的:

// 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功能来实现它。