最小起订量与 c# System.Windows.MessageBoxButton.YesNoCancel

Moq with c# System.Windows.MessageBoxButton.YesNoCancel

我目前正在围绕程序的 WPF 模块编写一些单元测试。我已经到了 ShowMessage return 语句中的 YesNo 值的地步。

dService.ShowMessage(view, args);

args 采用 lambda 作为(缩短)

new MessageArgs(arg1, arg2, arg3, (la) => 
{
   if (la.result == messResult.yes)
   {
   // do something
   }
}

我现在正试图模拟从这个 lambda 返回的结果,但我遇到了一些困难,而且一直无法找到有类似问题的人。

我尝试在单元测试中的 lambda 中设置默认结果:

new MessageArgs(arg1, arg2, arg3, (la) => 
{
   if (la.result == messResult.yes)
   {
       la.result = messResult.yes;
   }
}

尝试将语句下方的 arg 结果设置为:

args.result = messResult.yes;

我也曾尝试将安装程序用作:

dServiceMock.Setup(x => x.ShowMessage)

但是没有 return 属性 因为 ShowMessage 是一个空函数。

None 显示了我的单元测试中的操作变化。有没有其他人有类似的 "problem" 并找到了解决方案或知道一些关于此的文档?如果我同时发现了什么,我会更新这个。

谢谢。

如果 dService 不是 sealed class 的实例,创建一个 subclass 以您需要的方式覆盖 ShowMessage 方法为了您的测试目的。

编辑:

问题是由 dService.ShowMessage(view, args) 封装两个(或更多)操作的调用引起的:
- 通话 view.ShowMessage
- 调用包含在 args 中的 lambda,结果为 view.ShowMessage

现在您必须创建 dService.ShowMessage(view, args) 这样:
- 它不显示视图
- 它假定该操作的结果
- 以期望的结果调用 lambda