繁体   English   中英

使用Moq查看是否使用值调用方法

[英]Using Moq to see if method was called with a value

使用Microsoft Visual Studio 2017内置的Moq测试。

我有一个创建一些内容的简单类,然后将内容发送到通知系统。 我需要测试是否调用了通知系统,但是调用包含了一些文本。

 public void DoStuff()
            var tenantSettings = _tenantService.GetTenantSettings();
            tenantSettings.Body = "xxx SOME VALUE xxx";
            MyService.SendMail(tenantSettings.Body);

如何测试SendMail是否包含“SOME VALUE”文本?

我有一个MOCK设置:

 MyServiceMock.Setup(x=>x.SendMail(It.IsAny<string>);

您可以在模拟上使用Verify方法:

MyServiceMock.Verify(x => x.SendMail("SOME VALUE"), Times.Once());

编辑:

如果您想验证作为参数传递的文本是否与参数完全匹配,但只包含测试值,您可以使用,如Scott Chamberlain所写:

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());

您需要使用Verify函数allong与It.Is<TValue>(Func<TValue,bool>)函数来搜索子字符串。

MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());

在调用DoStuff()之后,将此行放在测试函数的末尾。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM