我在MVVM中看过一些关于单元测试视图模型的文章,以及测试本身如何成为视图模型的消费者,测试viewModel和model的功能。但是,我想知道如何测试视图(UI)以确保它们正确连接到我的视图模型。我不想编写一个测试,例如,按下按钮以确保将某些内容写入数据库,因为这有效地测试了我的VM,我已经完成了。
例如,我希望能够编写测试以确保按钮连接到特定命令。因此,阻止任何人进入并删除按钮的命令,使其不再起作用。
这可能吗?感谢。
答案 0 :(得分:3)
但如果某人(希望是设计师)想要将Button
更改为MenuItem
怎么办?您的测试将中断,您将不得不修复它。 MVVM的主要好处之一是设计师可以真正自由地安排和重新安排界面,但他们喜欢不需要与开发人员进行过多的来回。针对用户界面编写单元测试证明了这一点。
我在这里扮演魔鬼的拥护者。我不是说测试用户界面完全没用,而且从来没有在任何人的代码库中占有一席之地。我所说的是回报正在减少,而你可能正在为另一个问题交易。
至于如何在“隔离”中实际测试视图。 。 。我认为最简单的方法是使用注入模拟服务的视图模型。您的视图模型可以使用服务定位器来获取相关服务,因此您的单元测试可以注入虚拟服务。然后,您可以使用命名元素引用,可视树爬网和WPF UI自动化API的组合来声明不同的可视元素具有按预期设置的属性。
答案 1 :(得分:0)
我认为Telerik(测试艺术)有一些东西可以帮助自动化原始用户界面。 http://www.artoftest.com/products/webaii.aspx 虽然现在我查了一下Silverlight而不是WPF。希望它至少是一个很好的起点。