2

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

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

4

3 回答 3

3

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

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

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

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

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

我希望这可以帮到你

于 2012-07-25T19:51:13.247 回答
0

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

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

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

于 2012-07-25T14:22:28.123 回答
0

是的。它工作得很好。最大的挑战是真正定义你的句子结构和 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 进行自动化测试。部署数据库和服务器(使用真实数据或测试数据),然后针对该服务器/数据库执行功能测试套件(创建数据、修改数据等)。

于 2013-01-31T21:05:42.087 回答