2012-03-16 101 views
6

我有一个C#桌面应用程序(CompositUI/WinForms)。此应用程序使用SmartClient连接到Web服务。 我的任务是使用SpecFlow和White框架为此应用程序引入(改进)测试。为了测试GUI,我需要模拟web服务调用。连接到它的类正在通过Spring.net注入。 我的任务是测试应用程序能够在测试过程中模拟Web服务调用,这意味着我的测试代码需要控制我的模拟将执行的操作。 问题:启动GUI的方法根本不会将控制权返回给调用它的线程。结果,我们无法控制GUI和模拟。使用SpecFlow,White,Spring和MS Test来测试WinForms/CompositeUI GUI

所以问题我必须在这一点上是:

  • 是可行的(如果是的话 - 如何做到这一点),在单独的线程启动GUI,并有控制回测试线程?

  • 什么是运行GUI测试的其他可能性,这将使我能够控制注入?

回答

-1

基本测试.NET UI你将不得不使用MVVM工具集或创建一个,所以你可以配置你的解决方案,以测试由UI使用的方法。有许多支持.net的框架可以在Wikipedia上找到。

所有MVVM UI测试的基础知识都是DI/IOC框架,您还需要选择它。

本质上你创建一个你可以测试的ViewModel类。以WPF为例进行单元测试 - http://www.markermetro.com/2010/07/technical/mvvm-light-and-unit-testing-example/

现在有几个需要思考的问题。首先,.NET WinForms不会因M $(THANKS A BUNCH!)而发生重大变化,而XAML/WPF没有升级路径。 MS $表示开发人员应该开始使用WPF UI设计器开展前进的桌面项目。支持WinForms的MVVM框架数量有限,因此您可能需要通过DI推出自己的产品,但请参阅以下有关该主题的StackOverflow讨论。其次是.NET窗体到WPF到Windows Phone到Web UI到Metro UI的实现问题。根据Mark Seemann and his Dependency Injection in .NET的书,微软的P & P团队为xaml创建了Prism/WPF具有一些Dependancy Injection反模式(服务定位器是BAD)。棱镜尚未升级到Metro并重新架构,混淆了采用者并使其部分冗余。从本质上讲,我的观点是,获得一个允许应用程序用户界面前进的框架将会很困难。

+0

这不回答这个问题。他不是在谈论单元测试演示逻辑,他实际上想要测试点击按钮并在文本框中输入。如何构建ui(mvvm,MVP,后面的代码)与那种测试无关。 – Andy 2014-06-18 12:55:23

+0

也支持winforms,但它不会有重大变化。 Wpf将是构建新的桌面应用程序(这些不会消失)和Windows Store应用程序的xaml/winrt或win/js应用程序的首选方式。 – Andy 2014-06-18 12:59:43

+0

@Andy修改回复澄清技术。 – 2014-08-04 12:12:46

相关问题