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

Ian*_*ink 2 c# unit-testing moq visual-studio

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

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

 public void DoStuff()
            var tenantSettings = _tenantService.GetTenantSettings();
            tenantSettings.Body = "xxx SOME VALUE xxx";
            MyService.SendMail(tenantSettings.Body);
Run Code Online (Sandbox Code Playgroud)

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

我有一个MOCK设置:

 MyServiceMock.Setup(x=>x.SendMail(It.IsAny<string>);
Run Code Online (Sandbox Code Playgroud)

小智 6

你可以简单地Verify在你的模拟上使用方法:

MyServiceMock.Verify(x => x.SendMail("SOME VALUE"), Times.Once());
Run Code Online (Sandbox Code Playgroud)

编辑:

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

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