Moq问题-仅在Build Server(TeamCity)上



我有一个被嘲笑的接口:

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字符串[]cc的单个方法,但我在试图找出构建服务器上的错误时将这些方法拆分。我真正想要的是一个严格的模拟,但我现在正在以动态方式运行它,这样我就可以使用以下验证来比较结果:

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

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

模拟上应至少调用一次,但从未调用执行:es=>es.SendAsHtml(.accountEmail,.fromEmail,.subject,It.Is(s=>s.Equals(.expectedEmailString,字符串比较。序号)))未配置任何设置。

已执行调用: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测试跑步者
  • 。净4
  • NUnit 2.5.10.11092
  • 修订本4.0.10827.0

因此,我最终只是删除了对巨大HTML字符串的"完整字符串"检查,并仅进行检查以确认我们(通过string.format)注入到字符串中的值是否存在。这将在本地和服务器上传递。这并不理想,但我想这也不是世界上最糟糕的事情。

最新更新