集成TDD和Web应用程序开发的最佳实践?


26

单元测试和ASP.NET Web应用程序在我的组中是一个模棱两可的问题。通常情况下,良好的测试实践通过裂缝和网络应用程序最终会在没有测试的情况下进行数年。

这个痛点的原因通常围绕编写UI自动化中期开发的麻烦。

您或您的组织如何将最佳的TDD实践与Web应用程序开发结合起来?

18

单元测试将是可以实现的,如果你适当分离图层。正如Rob Cooper所暗示的,不要在您的WebForm中使用逻辑以外的任何逻辑来管理演示文稿。所有其他的逻辑和持久层应该保存在不同的类中,然后你可以单独测试它们。

测试GUI有些人喜欢selenium。其他人抱怨说,这是一个痛苦的建立。

+1

好,也许硒对一些疼痛设置..但是这就是为什么别人有工作:) 13 7月. 152015-07-13 12:45:43


4

我将应用程序分层并且至少从演示者/控制器(取决于您的偏好,mvc/mvp)对数据层进行单元测试。这样,我对大部分编写的代码都有很好的测试覆盖率。

我已经看过FitNesse,Watin和Selenium作为自动化UI测试的选项,但是我还没有在任何项目上使用这些选项,所以我们坚持使用人体测试。 FitNesse是我所倾向的那个,但我不能介绍这个以及引入TDD(这是否使我变得糟糕?我希望不会!)。


2

这是一个很好的问题,一个我会订阅太:)

我还是比较新的Web开发,我也期待在大量的代码,大部分都未经检验。

对我来说,我保持UI 尽可能轻,(通常只有几行代码),并测试一切其他的东西。至少我可以有一些信心,让它在用户界面上的一切都是正确的。

完美吗?也许没有,但至少它还是相当高度自动化和核心代码(其中大部分的“神奇”的情况),仍具有相当不错的覆盖..


2

通常的做法是将您可以从代码隐藏中移出的所有代码移动到可以独立测试的对象中。这样的代码通常会遵循MVP或MVC设计模式。如果你在“Rhino Igloo”上搜索,你可能会找到它的Subversion版本库的链接。该代码值得研究,因为它展示了我所见过的Web窗体上最好的MVP实现之一。

你的代码隐藏意志,下面这个模式的时候,做两件事情:

  1. 交通所有用户操作来演示。
  2. 呈现演示者提供的数据。

单元测试演示者应该是微不足道的。

更新:犀牛冰屋可以在这里找到:https://svn.sourceforge.net/svnroot/rhino-tools/trunk/rhino-igloo/


0

已经有尝试上获得微软的免费UI自动化(包含在.NET框架3.0)与Web应用程序(ASP.NET)一起工作。一家名为Artiso的德国公司恰好写了一篇博客文章,解释如何实现该目标(link)。

但是,他们的博文还链接了一个MSDN网络广播,它解释了UI自动化框架和winforms,在我看了这个之后,我注意到您需要AutomationId来获取对控件的引用。但是,在Web应用程序中,控件没有AutomationId。

我问Thomas Schissler(Artiso)这件事,他解释说这是InternetExplorer的一个主要缺点。他引用了微软的老技术(MSAA),并希望IE8能够做得更好。

但是,我也给了Watin一个尝试,它似乎工作得很好。我甚至喜欢Wax,它允许通过Microsoft Excel工作表实现简单的测试用例。


0

Ivonna可以单元测试您的意见。我仍然建议将大部分代码移到其他部分。但是,其中的一些代码就属于,就像对控件或控件事件处理程序的引用一样。


2

我通常会避免涉及依赖UI元素的测试。我喜欢集成测试,它测试从数据库层到视图层(但不是实际布局)的所有内容。

尝试启动一个测试套件之前在新项目中编写一行实际代码,因为以后编写测试会更困难。

仔细选择你测试的东西 - 不要盲目地为所有东西写测试。有时这是一个无聊的任务,所以不要让它更难。如果您编写的测试过多,那么您有可能在费时的维护工作的压力下放弃这项任务。

尝试将尽可能多的功能捆绑到单个测试中。这样,如果出现问题,错误将会传播。例如,如果您有一个生成摘要的类 - 请测试实际的输出,而不是每个辅助函数。

不要相信自己。假设你总会犯错误,所以你写测试让你的生活变得更轻松,而不是更难。

如果你是不是感觉良好的写作测试,你可能就错了;)