我有一个被嘲笑的界面:
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