使用 Moq 查看是否使用值调用了方法
Using Moq to see if method was called with a value
使用 Microsoft Visual Studio 2017 的内置测试和最小起订量。
我有一个简单的 class 创建一些内容,然后将内容发送到通知系统。我需要测试通知系统是否被调用,但调用中包含一些文本。
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>);
您可以简单地在 mock 上使用 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
函数和 It.Is<TValue>(Func<TValue,bool>)
函数来搜索子字符串。
MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());
在 DoStuff()
被调用后,您将此行放在测试函数的末尾。
使用 Microsoft Visual Studio 2017 的内置测试和最小起订量。
我有一个简单的 class 创建一些内容,然后将内容发送到通知系统。我需要测试通知系统是否被调用,但调用中包含一些文本。
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>);
您可以简单地在 mock 上使用 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
函数和 It.Is<TValue>(Func<TValue,bool>)
函数来搜索子字符串。
MyServiceMock.Verify(x => x.SendMail(It.Is<string>(s => s.Contains("SOME VALUE")), Times.Once());
在 DoStuff()
被调用后,您将此行放在测试函数的末尾。