我正在对对话框进行单元测试,在测试用例对话框中可能会根据测试用例启动不同的消息。
对话框代码:
uiService.ShowMessage(StudioViewName.MainWindow, "No cell selected.", this.resourceManager.GetResourceString(StudioResourceManagerName.StudioResourceManager, "IDC_WinshuttleStudio"), MessageBoxButton.OK, MessageBoxImage.Error);
我嘲笑它:UIServicemock.Setup(u=>u.ShowMessage(It.IsAny<int>(),It.IsAny<string>(),It.IsAny<string>(),It.IsAny<MessageBoxButton>(),It.IsAny<MessageBoxImage>()))
现在,我想检查对话框中的消息,或者在单元测试用例中验证是否仅弹出特定的消息方框。
答案 0 :(得分:2)
您可以使用回调断言值与您期望的值匹配。
UIServicemock
.Setup(u => u.ShowMessage(It.IsAny<int>(), It.IsAny<string>(), It.IsAny<string>(),
It.IsAny<MessageBoxButton>(), It.IsAny<MessageBoxImage>()))
.Callback<int, string, string, MessageBoxButton, MessageBoxImage>((window, message, error, button, image) => {
Assert.That(message, Is.EqualTo("No cell selected"));
Assert.That(window, Is.EqualTo(StudioViewName.MainWindow));
});
或者您可以使用匹配特定参数的It匹配器,如下所示:
UIServicemock
.Setup(u => u.ShowMessage(
It.Is<int>(s => s == StudioViewName.MainWindow),
It.IsIn<string>("No cell selected"),
It.IsAny<string>(),
It.IsAny<MessageBoxButton>(),
It.IsAny<MessageBoxImage>()));
我通常发现第一种方法更灵活,但它更冗长。
答案 1 :(得分:1)
使用Verify
:
string expectedResourceString = /* whatever you expect */;
UIServicemock.Verify(u => u.ShowMessage(StudioViewName.MainWindow,
"No cell selected",
expectedResourceString,
MessageBoxButton.OK,
MessageBoxImage.Error));
更清楚你要测试的是什么。如果您不关心某个值,请使用It.IsAny
代替它。