【问题标题】:How to go about implementing Specflow with WPF app using MVVM如何使用 MVVM 使用 WPF 应用程序实现 Specflow
【发布时间】:2012-07-22 21:44:53
【问题描述】:

我们有一个使用 MVVM 模式在 wpf + DevExpress 中开发的应用程序。我们需要在视图模型级别上使用 MStest 实现 Specflow。

有人试过吗?任何指针? codedUI 在视图模型级别有​​什么好处吗?

【问题讨论】:

    标签: mvvm viewmodel specflow coded-ui-tests


    【解决方案1】:

    当我读到这个问题时,我有两个想法。

    首先 - 想一想您是否真的需要通过 UI 自动执行所有操作。使用像 MVVM 这样的架构,你有很好的机会在 UI 下点击应用程序,并且仍然可以从你的测试自动化中获得很多。例如,针对 ViewModel 编写您的步骤定义。 针对 UI 进行测试很容易冒创建脆弱测试的风险。 UI 是大多数应用程序中变化非常频繁的部分。命中 UI 的测试需要以某种方式处理这个问题(稍后会详细介绍)。

    其次,对于您需要针对 UI 自动化的事情,请考虑使用 White,这是 UI 自动化库之上的一个很好的面向对象抽象。我已经广泛使用它并且喜欢它。

    对于任何自动化,请务必在实际自动化之上创建一个抽象,例如使用驱动程序模式。一种简单的方法是创建一个屏幕/页面对象,该对象具有与相关屏幕/页面交互的属性和方法。然后,您的步骤定义将使用这些包装器对象。

    保持你的步骤定义精简,你的包装器对象胖。有点像 MVC 模式中的控制器。更多关于这个here

    希望对你有帮助

    【讨论】:

    • 为了进一步支持该语句(使用 ViewModel 层作为测试的入口点,而不是通过自动化访问 UI)——值得记住 XAML 到 ViewModel 的绑定引擎多年来,微软和开发者社区已经对它进行了非常广泛的测试......所以你应该相信这个逻辑是可行的。因此,当您推出软件时,如果您的 ViewModel 级别测试有
    【解决方案2】:

    好吧,我还没有尝试过,但我看不出有什么问题。通过使用 specflow,您可以创建方法来做一件事,比如“用户按下关于按钮”,您的代码将是这样的

    [Given(@"The user presses the about button")]
    public void TheUserPressesTheAboutButton()
    { 
        this.UIMap.PressAboutButton();
    }
    

    您可能不得不摆弄来创建所有方法,但这没什么大不了的。有一个简单的指南here。控件的命名和标识可能是一个小故障,以便 CUIT builder 能够找到它们。

    【讨论】:

    • 谢谢大家。你的 cmets 很有帮助。我们决定继续使用 specflow 的 codedUI 方法。我正在编写自己的基于页面对象的解决方案来创建脚本 .. 因为使用 3rd 方 wpf 控件对编码 UI 的默认识别并不是那么好。到目前为止它运行良好......
    • @Logic-mantra 3rd 方控件的支持真的很差。我目前正在使用 Cobra - WinLDTP 来自动化 Infragistics 的控件。非常好的和快速的工具,虽然它需要相当多的编码:) 干杯,祝你好运
    【解决方案3】:

    是的。它工作得很好。最大的挑战是真正定义你的句子结构和 Given/When/Then 语句,以便它们保持一致和可重用。否则,您最终会得到一个方法的标签和 5-10 个给定。不太容易维护。

    我们使用 Specflow 对 MVVM 以及其他业务组件进行单元测试。 Given 语句基本上会设置模拟数据,然后执行测试:

    Given I have created a database context
    And it contains the following Books
    |ISBN   | Author  | Title  |
    ...
    

    我还使用 specflow 进行功能测试(端到端),通过 TFS 进行自动化测试。部署数据库和服务器(使用真实数据或测试数据),然后针对该服务器/数据库执行功能测试套件(创建数据、修改数据等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 2018-04-13
      相关资源
      最近更新 更多