我在Dimecasts.net上观看了此Introduction to Moq video。在视频中,当这个家伙设置起订量测试时,他具有以下代码:

[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并未将string关键字放在尖括号中。 (固定)

最佳答案

1)Moq不会影响SendBatchEmails的工作方式,因为您没有嘲笑Emailer类。取而代之的是模拟IEmailService接口,因此,如果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/

10-12 12:36