私は嘲笑されているインターフェースを持っています:
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