C# 使用Moq查看是否使用值调用了方法
使用Microsoft Visual Studio 2017的内置测试和Moq 我有一个简单的类,它创建一些内容,然后将内容发送到通知系统。我需要测试通知系统是否被调用,但调用是否包含一些文本C# 使用Moq查看是否使用值调用了方法,c#,visual-studio,unit-testing,moq,C#,Visual Studio,Unit Testing,Moq,使用Microsoft Visual Studio 2017的内置测试和Moq 我有一个简单的类,它创建一些内容,然后将内容发送到通知系统。我需要测试通知系统是否被调用,但调用是否包含一些文本 public void DoStuff() var tenantSettings = _tenantService.GetTenantSettings(); tenantSettings.Body = "xxx SOME VALUE xxx";
public void DoStuff()
var tenantSettings = _tenantService.GetTenantSettings();
tenantSettings.Body = "xxx SOME VALUE xxx";
MyService.SendMail(tenantSettings.Body);
如何测试SendMail是否包含文本“SOME VALUE”
我有一个模拟设置:
MyServiceMock.Setup(x=>x.SendMail(It.IsAny<string>);
MyServiceMock.Setup(x=>x.SendMail(It.IsAny);
您只需在模拟上使用验证方法即可:
MyServiceMock.Verify(x => x.SendMail("SOME VALUE"), Times.Once());
编辑:
如果要验证作为参数传递的文本是否不完全匹配,而只是包含测试值,可以使用,如下所述:
MyServiceMock.Verify(x=>x.SendMail(It.Is(s=>s.Contains(“某些值”)),Times.Once();
您需要使用Verify
函数allon和It.Is(Func)
函数来搜索子字符串
MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());
MyServiceMock.Verify(x=>x.SendMail(It.Is(s=>s.Contains(“某些值”)),Times.Once();
在调用了DoStuff()
之后,您将这一行放在测试函数的末尾。注意,如果传入的字符串是“xxx SOME value xxx”
,则这只匹配确切的值“SOME value”
,而该字符串与此代码不匹配。没错,我没有看到编辑,原始问题不同
MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());