使用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>);
答案 0 :(得分:6)
您可以在模拟中使用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());
答案 1 :(得分:2)
您需要使用Verify
函数和It.Is<TValue>(Func<TValue,bool>)
函数来搜索子字符串。
MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());
在调用DoStuff()
后,将此行放在测试函数的末尾。