使用包含字符串的参数进行断言

Assert with the parameter that contains string

我正在使用 MSTestMoq 编写单元测试。我想测试是否使用包含子字符串的字符串参数调用了一个方法。

_mockMessageService.Verify(x => x.ShowMessage(It.IsAny<string>()), Times.Once());

在上面的代码中,我可以验证 ShowMessage 方法使用一些字符串参数调用了一次,但我想确保该字符串包含 successfailpartially success等。我不能直接传整个字符串,因为它不一致,只有一部分是一致的。可能吗?

It.Is<>() 允许使用谓词来验证参数

_mockMessageService.Verify(x => x.ShowMessage(It.Is<string>(s => 
    s.Containes("success", StringComparison.InvariantCultureIgnoreCase) || 
    s.Containes("fail", StringComparison.InvariantCultureIgnoreCase) ||
    s.Containes("partially success", StringComparison.InvariantCultureIgnoreCase)
)), Times.Once());

参考:MOQ Quickstart - Matching Arguments