如何测试WPF用户界面?

.net wpf testing

43156 观看

14回复

358 作者的声誉

使用带有MVC / MVP架构的win表单,我通常会使用一个类来包装视图以测试UI,同时使用模拟和控制器/演示者的模拟。包装器类将使UI中的大多数内容成为测试运行器通过属性和事件的可观察属性。

这是测试WPF应用程序的可行方法吗?有没有更好的办法?有什么值得注意的吗?

作者: Matt David 的来源 发布者: 2008 年 9 月 12 日

回应 14


11

102383 作者的声誉

@Matt David,

请阅读文档并查看Microsoft CompositeWPF(aka Prism)的代码示例。这是一个专门用于教授如何以测试驱动方式处理MVP / MVC架构的项目。他们的示例应用程序包含演示者\控制器的单元测试和非常酷的UI验收测试(他们使用白色框架来模拟用户操作)

作者: aku 发布者: 2008 年 9 月 12 日

0

6583 作者的声誉

它会比使用win表单更好,更容易。

检查“WPF应用程序质量指南”,它有很多关于测试WPF接口的信息。另外不要忘记AutomationPeer类。

作者: ima 发布者: 2008 年 9 月 12 日

10

104969 作者的声誉

手动。我不是自动化UI测试的忠实粉丝,如果这就是你所得到的。我不确定WPF的指导(需要通过aku的链接阅读)..因为它们仍然可以说是固执...... WPF从“正确的方式”的角度来看还没有稳定下来。除非你使用这些不断发展的框架之一。我会保守的

  • 无情地测试(自动优选TDDed)逻辑/演示者/控制器。我不是在提倡邋iness或嗜睡
  • 保持UI皮肤薄,并让一些讨厌的测试人员通过探索性测试得到(手动)破解 - 当涉及UI时,没有什么能像'来自地狱的测试者'一样好。努力:自动化这种测试的增益比是巨大的,没有抓住一切,没有意义......除了安抚高层'看看经理!没有手!自我测试用户界面!'

PS:你可能想要观看这个(Mary Poppendieck的Google精益谈话)..尤其是关于在测试中自动化的部分

作者: Gishu 发布者: 2008 年 9 月 12 日

3

5067 作者的声誉

Prism(复合WPF)的构建主要是考虑到“可测试性”。如果你认为它适合你的发展,那就去吧。

如果您需要有关Prism音频的更多信息,这里还有您可以收听的dotnetrocks剧集

作者: Vin 发布者: 2008 年 9 月 15 日

1

1035 作者的声誉

对于基础知识,您还可以在这里这里查看 channel9上的一些简短视频。

作者: Alan 发布者: 2008 年 9 月 15 日

55

4667 作者的声誉

决定

至于测试本身,您可能最好使用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问题。

作者: Kjetil Klaussen 发布者: 2008 年 9 月 23 日

0

45550 作者的声誉

绝对看看TestAutomationFX.com。人们可以投入(好吧,我做了)大量时间尝试使用White捕获/记录事件。(在我的任务开始时,我忽略了其他地方引用它的一两个帖子)。

我当然是关于最佳类型测试而不是UI测试的其他要点。

但是,如果有人要在UI中做一些可自动化的事情来解决其他类型的测试覆盖范围的缺点,那么TAFX似乎是那里最快的路线。

作者: Ruben Bartelink 发布者: 2008 年 12 月 4 日

0

0 作者的声誉

尝试使用Ranorex V2.0进行WPF自动化。使用RanoreXPath和Ranorex存储库,测试自动化代码可以完全与识别信息分开。Ranorex还提供基于RanoreXPath对象的捕获/重放编辑器。

作者: Michael 发布者: 2008 年 12 月 9 日

0

2297 作者的声誉

而不是使用自动测试仪,您可以使用IcuTest为GUI创建真正的单元测试。

作者: Ray 发布者: 2010 年 4 月 19 日

1

2073 作者的声誉

你也可以试试Guia。它允许您直接单元测试单个WPF UserControls。

作者: treze 发布者: 2010 年 7 月 4 日

0

106 作者的声誉

我建议TestAutomationFX以及ui测试的简单自动化。TestAutomationFX允许你使用netAdvantage工具为wpf aswell,它不适用于白色和QTP。TestAutomationFX具有易于使用的界面,它与visual studio集成,并具有良好的记录用于记录用户事件的记录器。

作者: Gokul 发布者: 2010 年 7 月 15 日

8

3624 作者的声誉

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<Button>("btnMyButtonWPFname");
    
        //Simulate clicking
        btnMyButton.Click();
    
        //Gets the result text box 
        //Note: TextBox/Button is in TestStack.White.UIItems namespace
        var txtMyTextBox = window.Get<TextBox>("txtMyTextBox");
    
        //Check for the result
        Assert.IsTrue(txtMyTextBox.Text == "my expected result");
    
        //Close the main window and the app (preferably in [TestCleanup])
        app.Close();
    }
    
作者: Justas 发布者: 2016 年 10 月 26 日

0

131 作者的声誉

由于Coded UI框架在Visual Studio版本2019(推荐使用的编码UI)之后到期,因此Microsoft建议使用带有WinAppDriver的Appium来测试Windows应用程序(Desktop和UWP)。

以下是一些有用的链接:

WinAppDriver

WinAppDriver 1.0版

WinAppDriver UI录制工具

介绍WinAppDriver UI Recorder

作者: HHenn 发布者: 2019 年 7 月 18 日
32x32