使用带有MVC/MVP架构的win表单,我通常会使用一个类来包装视图以测试UI,同时使用模拟和控制器/演示者的模拟.包装器类将使UI中的大多数内容成为测试运行器通过属性和事件的可观察属性.
这是测试WPF应用程序的可行方法吗?有没有更好的办法?有什么值得注意的吗?
至于测试本身,您可能最好使用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问题.
@Matt David,
请阅读文档并查看Microsoft CompositeWPF(aka Prism)的代码示例.这是一个专门用于教授如何以测试驱动方式处理MVP/MVC架构的项目.他们的示例应用程序包含演示者\控制器的单元测试和UI的非常酷的验收测试(他们使用White框架来模拟用户操作)
手动.我不是自动化UI测试的忠实粉丝,如果这就是你所得到的.我不确定WPF的指导(需要通过aku的链接阅读)..因为它们仍然可以说是固执...... WPF从"正确的方式"的角度来看还没有稳定下来.除非你使用这些不断发展的框架之一.我会保守的
无情地测试(自动优选TDDed)逻辑/演示者/控制器.我不是在提倡邋iness或嗜睡.
保持UI皮肤薄,并让一些讨厌的测试人员通过探索性测试得到(手动)破解 - 当涉及UI时,没有什么能像'来自地狱的测试者'一样好.努力:自动化这种测试的增益比是巨大的,没有抓住一切,没有意义......除了安抚高层'看看经理!没有手!自我测试用户界面!'
PS:你可能想要观看这个(Mary Poppendieck的Google精益谈话)..尤其是关于在测试中自动化的部分
2016更新:使用免费的TestStack.White框架自动执行WPF UI测试
Project White已被放弃,但其后继者TestStack.White可通过NuGet包获得.
TestStack.White具有启动WPF应用程序,查找窗口/ 用户控件元素,单击按钮/元素,模拟鼠标和键盘事件,等待等的实用程序方法.
将启动WPF应用程序,单击按钮并检查结果的示例如下所示:
using TestStack.White; using TestStack.White.UIItems; using TestStack.White.Factory; [TestMethod] public void TestDoSomething() { //Opens the app var app = Application.Launch("MyApp.exe"); //Finds the main window (this and above line should be in [TestInitialize]) var window = app.GetWindow("My App Window Title", InitializeOption.NoCache); //Finds the button (see other Get...() methods for options) var btnMyButton = window.Get