我看了这个Introduction to Moq video在 Dimecasts.net 上。在视频中,当这个人设置起订量测试时,他有以下代码:
[Test]
public void TestWithMock()
{
var mockEmailService = new Mock<IEmailService>();
mockEmailService.Expect(x =>
x.SendEmail(It.IsAny<string>,It.IsAny<string>)).Returns(true);
var emailer = new Emailer(mockEmailService.Object);
emailer.SendBatchEmails();
}
这是我的问题:
1) moq 是否循环遍历所有不同类型的字符串来测试 SendBatchEmails 方法? 我想我对模拟的工作原理有点困惑。
2)有人可以解释一下 Expect 部分的 lambda 语法吗?
3)作者首先在SendEmail函数中添加了“”,“”,但是失败了,所以他改为将
It.IsAny<string>
,但我仍然不清楚为什么它失败了“”,“”。
Stackoverflow 没有将字符串关键字放在尖括号中。(已修复)
最佳答案
1) 起订量不影响 SendBatchEmails
有效,因为您没有 mock Emailer
类(class)。相反,您正在 mock IEmailService
接口(interface),所以如果Emailer
类调用 IEmailService
上的方法对象,Moq 将捕获这些调用。
2) 您告诉 Moq 您正在期待 SendEmail
方法IEmailService
被称为。您还告诉 Moq 当 SendEmail
被调用时,您希望 Moq 自动返回 true
.
由于 Moq 对象被传递到 Emailer
类,此测试将测试 SendBatchEmails
中的代码是否有效调用SendEmail
方法。
3) 仅当参数匹配时,期望才会实现。如果您告诉 Moq 您期望 SendEmail
被调用 "", ""
作为参数,SendEmail
用不同的字符串调用,它会失败。 It.IsAny<string>()
告诉 Moq 将期望与任何字符串作为参数相匹配。
关于c# - 此 Moq 测试主要针对 linq 语法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1534394/