c# - 此 Moq 测试主要针对 linq 语法如何工作?

标签 c# linq moq

我看了这个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/

相关文章:

C# - iTextSharp 该文档没有页面

c# - 在此上下文中没有响应

c# - ajax beginForm 传递路由值和按钮值

c# - 管理员返回 null 但为什么?

c# - Azure Functions V2 的单元测试 MessageSender

c# - 如何通过 Windows Phone 7 将数据传递给 Asp.net Web API

c# - 将一个字典转换为另一个具有不同键类型的字典

C# 判断字符串数组中的某个元素是否在任意位置包含给定的字符串

c# - LINQ 中的 SQL LIKE

c# - 最小起订量 'TestMethod(Action<int> callback)' 并能够 'call' 回调