如何测试WPF用户界面?
使用具有MVC / MVP架构的win窗体,我通常会使用一个类来包装视图以测试UI,同时将模拟用于模型和控制器/演示者。包装器类将通过属性和事件使UI中的大多数内容成为测试运行程序的可观察属性。
这是测试WPF应用程序的可行方法吗?有没有更好的办法?有需要注意的陷阱吗?
解决方案
回答
@马特·戴维(Matt David),
请阅读文档,并查看Microsoft CompositeWPF(aka Prism)的代码示例。这是一个专门创建的项目,旨在教授如何以测试驱动的方式处理MVP / MVC架构。他们的示例应用程序包含针对演示者\控制器的单元测试和针对UI的超酷验收测试(它们使用White框架来模拟用户操作)
回答
它比起赢奖形式还好,更容易。
检查" WPF应用程序质量指南",它在测试WPF接口方面有很多内容。
也不要忘记AutomationPeer类。
回答
手动。我不是自动化UI测试的忠实支持者,如果那正是我们想要的。我不确定WPF指南(需要通过aku的链接阅读)..因为它们仍在巩固,可以说... WPF从"什么是正确的方法"的角度来看并没有稳定下来。除非我们使用的是这些不断发展的框架之一。否则我会保守一点。努力
- 狠狠地测试(最好是TDD自动化)逻辑/演示者/控制器。我不是在提倡草率或者嗜睡。
- 保持UI皮肤薄,并通过探索性测试让一些讨厌的测试人员去(手动)破解-在UI方面,没有什么比"地狱的测试人员"更好。努力:通过自动化这种测试获得的收益率是巨大的,它无法捕获所有内容,也没有任何意义……除了要平息更高的UPS'Look Mgr!没有手!自检用户界面!"
PS:我们可能想看一下(Mary Poppendieck的Google Talk on Lean)。尤其是有关测试自动化的部分
回答
Prism(复合WPF)的构建主要考虑了"可测试性"。如果我们认为它适合发展,那就去做吧。
如果我们需要音频中有关棱镜的更多信息,这也是我们可以收听的dotnetrocks情节。
回答
有关基础知识,我们还可以在此处和此处在channel9上查看一些简短的视频。
回答
至于测试本身,最好使用UI自动化框架。或者,如果我们想更流畅,独立于wpf / winforms / win32 / swt的方式使用框架,可以从Codeplex下载White(前提是我们可以在环境中使用开源代码)。
对于陷阱如果要对视图进行单元测试,则可能会遇到一些线程问题。例如,如果我们正在运行NUnit,则默认的testrunner将在MTA(多线程公寓)中运行,而WPF需要作为STA(单线程公寓)运行。 Mike Two在单元测试WPF上确实很容易上手,但是没有考虑线程问题。乔什·史密斯(Josh Smith)在这篇文章中对线程问题有一些想法,他还指出了克里斯·赫德盖特(Chris Hedgate)的这篇文章。 Chris使用Peter Provost的CrossThreadTestRunner的修改版来以更友好的方式包装MTA / STA问题。
回答
绝对看看TestAutomationFX.com。一个人可以花很多时间(好吧,我做到了)尝试捕捉/记录怀特事件。 (在我的任务开始时,我在其他地方忽略了提到它的一两个帖子)。
当然,我还谈到了关于最佳测试类型的其他观点,而不是UI测试。
但是,如果有人要在UI中执行可自动化的操作来解决其他类型的测试覆盖范围中的缺点,那么TAFX似乎是那里最快的方法。
回答
尝试Ranorex V2.0实现WPF自动化。使用RanoreXPath和Ranorex存储库,可以将测试自动化代码与标识信息完全分开。 Ranorex还提供了基于RanoreXPath对象的捕获/重放编辑器。
回答
我们可以使用IcuTest为GUI创建真正的单元测试,而不必使用自动化测试器。
回答
我们也可以尝试Guia。它使我们可以直接对单个WPF用户控件进行单元测试。
回答
我也推荐使用TestAutomationFX来简化ui测试的自动化。 TestAutomationFX允许我们使用netAdvantage工具以及wpf,而白色和QTP则不起作用。 TestAutomationFX具有易于使用的界面,它与Visual Studio集成在一起,并且具有用于记录用户事件的良好记录器。