【发布时间】:2013-08-12 16:26:24
【问题描述】:
我有一个类(为简单起见,我将其称为 MyCustomCommand),它基本上接受两个委托用于 Execute 和 CanExecute。此类实现 ICommand。然后,这允许我在我的视图模型中声明一个属性,我从 XAML 绑定到该属性。
问题是我遇到了一个场景,由于我的一个名为 ApplyChangesCommand 的命令中存在依赖关系,我需要模拟视图模型。我不相信依赖是一件坏事。在这一点上是比较必要的。
由于这种依赖关系,我正在使用 Mock Setups 创建一个回调,它基本上“什么都不做”来规避依赖关系。
现在我已经模拟了视图模型,任何实例属性现在当然都是空的。这包括我的命令。
简单的例子是:
private void _somethingToExecute;
public ICommand ApplyChangesCommand { get { return MyCustomCommand(_somethingToExecute, e=>true); }
Mock 有什么方法可以让我真正调用 ApplyChangesCommand 的 _somethingToExecute? Callbase 没有削减它,我想不出任何其他方法来做到这一点。
一种解决方法是公开“_somethingToExecute”并在我的测试中创建 ApplyChangesCommand,但我不是粉丝。
任何建议表示赞赏。
谢谢
【问题讨论】:
-
我不得不读了几遍才能理解你的要求,所以我可能会离开这里。您在对命令或包含命令的视图模型进行单元测试时遇到问题吗?如果是命令(这就是我认为您要问的),您难道不能将传入的委托模拟到
MyCustomCommand构造函数,然后验证模拟委托是否被调用?那将是该命令的正确单元测试。测试 ViewModel 将是类似的 - 模拟命令并让其Execute调用调用_somethingToExecute。 -
非常感谢您的建议。让我看看……听起来它可能是在正确的轨道上!我的问题实际上围绕着对命令进行单元测试,因为我在模拟视图模型。由于视图模型是模拟的,因此命令本身为空
标签: c# unit-testing mocking viewmodel icommand