2

私は嘲笑されているインターフェースを持っています:

public interface IEmailService
{
    void SendAsHtml(string to, string from, string subject, string notification);
    void SendAsHtml(string to, string from, string subject, string notification, string[] cc);
}

以前は、params string[] cc を持つ単一のメソッドでしたが、ビルド サーバーで何が問題なのかを把握しようとして、メソッドを分割しました。私が本当に欲しいのは厳密なモックですが、現在動的として実行しているので、次の検証を使用して結果を比較できます。

emailService.Verify(es => es.SendAsHtml(accountEmail, fromEmail, subject, expectedEmailString));

パラメータは、accountEmail、fromEmail、および subject で一致します。動作していないように見えるのは、expectedEmailString (string.Format を介してテスト中のメソッドで構築されたもの) です。テスト中に期待値と実際の値をコンソールに書き込みましたが、出力を表示すると、ビルド サーバー上で同じように見えます。テストの失敗は次のとおりです (これは、序数比較を強制しようとしたバリエーションからのものです)。

モックでの呼び出しが少なくとも 1 回期待されていましたが、実行されませんでした: es => es.SendAsHtml(.accountEmail, .fromEmail, .subject, It.Is(s => s.Equals(.expectedEmailString, StringComparison.Ordinal)))セットアップが構成されていません。

実行された呼び出し: IEmailService.SendAsHtml("user@test.com", "sender@email.net", "asdfasdf", "長い html 文字列")

関連するセットアップは次のとおりです(すべてテスト対象のコントローラーに直接注入されます)。

    var getPersonalAccount = new Mock<IGetPersonalAccount>(MockBehavior.Strict);
    getPersonalAccount.Setup(gpa => gpa.WithAccountId(userAccountId).Execute()).Returns(account);

    var emailService = new Mock<IEmailService>();

    var trialSettings = new Mock<TrialSettings>(MockBehavior.Strict);
    trialSettings.Setup(ts => ts.Length).Returns(trialLength);
    trialSettings.Setup(ts => ts.FromEmail).Returns(fromEmail);
    trialSettings.Setup(ts => ts.Subject).Returns(subject);

件名と差出人アドレスは試用設定によって返され、宛先メール アドレスはアカウントから削除されます。メッセージ本文も、アカウントからの値でフォーマットされます。

関連ビット:

  • TeamCity 7.1 (ビルド 23907) - nunit 2.5.10 と 2.6 テストランナーの両方を試しました
  • .NET 4
  • NUnit 2.5.10.11092
  • モク 4.0.10827.0
4

1 に答える 1

0

そのため、巨大な HTML 文字列の「文字列全体」チェックを削除し、(string.format を介して) 文字列に注入する値が存在することを確認するためだけにチェックするだけになりました。これは、ローカルとサーバーの両方で渡されます。理想的ではありませんが、世界で最悪のことでもないと思います。

于 2012-09-21T12:39:00.083 に答える