单元测试和 ASP.NET Web 应用程序在我的小组中是一个模棱两可的点。通常情况下,良好的测试实践会被忽视,Web 应用程序最终会在没有测试的情况下运行数年。

造成这个痛点的原因通常与开发中期编写 UI 自动化的麻烦有关。

您或您的组织如何将最佳 TDD 实践与 Web 应用程序开发集成?

有帮助吗?

解决方案

单元测试是可以实现的,如果你 分离你的层 适当地。正如罗布·库珀暗示的那样, 除了管理演示文稿的逻辑之外,不要在 WebForm 中放置任何逻辑. 。所有其他逻辑和持久层应该保存在单独的类中,然后您可以单独测试它们。

测试一些人喜欢的 GUI . 。其他人则抱怨设置起来很麻烦。

其他提示

我将应用程序和至少单元测试从演示者/控制器(无论您的偏好,mvc/mvp)分层到数据层。这样我就可以对大部分编写的代码进行良好的测试覆盖。

我已经研究了 FitNesse、Watin 和 Selenium 作为自动化 UI 测试的选项,但我还没有时间在任何项目中使用这些,所以我们坚持进行人工测试。FitNesse 是我倾向于的那个,但我无法像介绍 TDD 一样介绍它(这会让我变坏吗?我希望不是!)。

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

我对网络开发还比较陌生,而且我也在查看大量基本上未经测试的代码。

对我来说,我保留 UI 尽可能轻 (通常只有几行代码)并测试其他所有内容。至少我可以有信心,UI 上的所有内容都是尽可能正确的。

完美吗?也许不是,但至少它仍然高度自动化,并且核心代码(大多数“魔法”发生的地方)仍然具有相当好的覆盖范围。

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

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

仔细选择您要测试的内容 - 不要盲目地为所有内容编写测试。有时这是一项无聊的任务,所以不要让它变得更难。如果编写太多测试,您就有可能因耗时的维护而放弃该任务。

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

不要相信自己. 。假设您总是会犯错误,因此您编写测试是为了让您的生活更轻松,而不是更困难。

如果您对编写测试感觉不佳,那么您可能做错了;)

常见的做法是将所有代码从代码隐藏中移出并移至可以单独测试的对象中。此类代码通常遵循 MVP 或 MVC 设计模式。如果您搜索“Rhino Igloo”,您可能会找到其 Subversion 存储库的链接。该代码值得研究,因为它展示了我见过的 Web 表单上最好的 MVP 实现之一。

当遵循此模式时,您的代码隐藏将执行两件事:

  1. 将所有用户操作传输给演示者。
  2. 渲染演示者提供的数据。

对演示者进行单元测试应该很简单。

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

人们已经尝试让 Microsoft 的免费 UI Automation(包含在 .NET Framework 3.0 中)与 Web 应用程序 (ASP.NET) 一起使用。一家名为 Artiso 的德国公司恰好写了一篇博客文章,解释了如何实现这一目标(关联).

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

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

不过,我也尝试过 Watin,效果似乎不错。我什至喜欢 Wax,它允许通过 Microsoft Excel 工作表实现简单的测试用例。

伊沃娜 可以对你的观点进行单元测试。我仍然建议将大部分代码移至其他部分。然而,有些代码只是 属于 那里,就像对控件或控件事件处理程序的引用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top