c# - 您如何正确测试 MVVM 中的 View ?

标签 c# wpf xaml mvvm

我看过一些关于 MVVM 中的单元测试 View 模型的文章,以及测试本身如何成为 View 模型的消费者,测试 viewModel 和模型的功能。但是,我想知道如何测试 View (UI) 以确保它们正确连接到我的 View 模型。我不想编写一个测试,例如,按下一个按钮以确保将某些内容写入数据库,因为这正在有效地测试我的 VM,我已经完成了。

例如,我希望能够编写一个测试来确保一个按钮连接到一个特定的命令。因此防止任何人出现并删除按钮的命令,使其不再起作用。

这可能吗?谢谢。

最佳答案

但是如果有人(希望是设计师)想要将 Button 更改为 MenuItem 怎么办?你的测试会失败,你必须修复它。 MVVM 的主要好处之一是,设计人员可以真正自由地按照他们喜欢的方式安排和重新安排界面,而无需与开发人员进行过多的来回交流。针对 UI 编写单元测试会破坏这种好处。

我有点唱反调了。我并不是说测试 UI 完全没有用,而且在任何人的代码库中都没有一席之地。我的意思是返回正在减少,您可能正在用一个问题换取另一个问题。

至于如何在“隔离”中实际测试 View 。 . .我认为最简单的方法是使用带有注入(inject)模拟服务的 View 模型。您的 View 模型可以使用服务定位器来获取依赖服务,因此您的单元测试可以注入(inject)虚拟服务。然后,您可以结合使用命名元素引用、可视树爬网和 WPF UI 自动化 API 来断言不同的可视元素具有按预期设置的属性。

关于c# - 您如何正确测试 MVVM 中的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1254713/

相关文章:

c# - ASP.NET 身份用户创建

c# - xmldoc.Childnodes.item() 问题

wpf - WPF 中的样式和绑定(bind)

wpf - 运行时错误 : InverseBooleanConverter not found

c# - 如何在 WPF 中获取视觉对象的渲染大小?

c# - 为 "just one more request..."保留 TempData

c# - 图片框图像在C#中不会改变

c# - 设置 ComboBox 项目高度

wpf - 当 Popup 的 IsOpen 属性设置为 True 时开始 StoryBoard

c# - ListView 顶部的堆栈布局 SCROLL