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);
}

它以前是带有参数 string[] cc 的单个方法,但我在尝试找出构建服务器上的问题时将方法分开。我真正想要的是一个严格的模拟,但我现在以动态方式运行它,所以我可以使用以下验证来比较结果:

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

参数在 accountEmail、fromEmail 和主题上匹配 - 它是 expectedEmailString(在被测方法中通过 string.Format 构造)似乎不起作用。我在测试时将预期值和实际值写入控制台,在查看输出时,它们在构建服务器上似乎是相同的。这是测试失败(这是来自我试图强制进行序数比较的变体):

对模拟的预期调用至少一次,但从未执行:es => es.SendAsHtml(.accountEmail, .fromEmail, .subject, It.Is(s => s.Equals(.expectedEmailString, StringComparison.Ordinal)))未配置任何设置。

执行的调用:IEmailService.SendAsHtml("user@test.com", "sender@email.net", "asdfasdf", "long html string")

以下是我认为的相关设置(全部直接注入被测控制器):

    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 (build 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 回答