MvcMailer 使用Rhino Mock 进行单元测试,如何进行?

发布于 2024-11-01 10:19:40 字数 953 浏览 1 评论 0原文

在一个新项目中,我们使用 MvcMailer,它很棒,我想知道如何使用 Rhino 和 NUnit 测试它?还有另一篇帖子 和一个不错的 Wiki 页面,但它不是我在寻找什么。对于我的控制器,我通常使用 MvcContrib 的 Testhelper 测试它们

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

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

In a new project we use MvcMailer, it's great and I would like to know how I can test it using Rhino and NUnit? There's an other post on SO and a good Wiki page but it's not what I'm looking for. For my controllers I usualy test them with MvcContrib's Testhelper

  • I try first to mock the mailer class but if I do this I can't verify my ViewBag data, I'm having problem with the PopulateBody method and I have to build my own IMailerBase interface
  • I try after this to test the mailer as I do with controller using MvcContrib but it only accept Controller object in the InitializeController() so it did'nt work.
  • There's also a IsTestModeEnabled property in the MailerBase.cs class but when I test against it I get an error on empty URI.

Don't know what is the best way to do this and I'm looking for help, thanks everyone!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

泪冰清 2024-11-08 10:19:40

下面是我的实现方法的代码:

// 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("[email protected]", "4454-8838-73773");

    // assert
    Assert.AreEqual(string.Format(Login.mailBody, "4454-8838-73773"), passwordMailer.ViewBag.Body);
    Assert.AreEqual(Login.mailSubject, mailMessage.Subject);
    Assert.AreEqual("[email protected]", mailMessage.To.First().ToString());

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

Here's the code how I did it :

// 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("[email protected]", "4454-8838-73773");

    // assert
    Assert.AreEqual(string.Format(Login.mailBody, "4454-8838-73773"), passwordMailer.ViewBag.Body);
    Assert.AreEqual(Login.mailSubject, mailMessage.Subject);
    Assert.AreEqual("[email protected]", mailMessage.To.First().ToString());

As you can see it, you can achieve it using partialMock functionnality from Rhino.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文