2

新しいプロジェクトでは、MvcMailer を使用しています。これは素晴らしいので、Rhino と NUnit を使用してテストする方法を知りたいですか? SO に関する別の投稿優れた Wiki ページがありますが、私が探しているものではありません。私のコントローラーでは、通常、MvcContrib の Testhelperでテストします。

  • 最初にメーラー クラスをモックしようとしましたが、これを行うと、ViewBag データを検証できません。PopulateBody メソッドに問題があり、独自の IMailerBase インターフェイスを構築する必要があります。
  • この後、MvcContrib を使用してコントローラーと同じようにメーラーをテストしようとしましたが、InitializeController() で Controller オブジェクトしか受け入れないため、機能しませんでした。
  • 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 に答える