7

我正在查看 SpecFlow 示例,它的 MVC 示例包含几个用于测试的替代方案:

  • 基于控制器生成的验证结果的验收测试;
  • 使用 MvcIntegrationTestFramework 进行集成测试;
  • 使用 Selenium 进行自动化验收测试;
  • 当提示测试人员手动验证结果时进行手动验收测试。

我必须说我对 SpecFlow 示例的编写效果印象深刻(下载后我设法在几分钟内运行它们,只需要配置数据库并安装 Selenium 远程控制服务器)。查看测试替代方案,我可以看到它们中的大多数相互补充而不是替代方案。我可以想到这些测试的以下组合:

  • 控制器以 TDD 风格进行测试,而不是使用 SpecFlow(我认为 Given/When/Then 类型的测试应该应用在更高的端到端级别;它们应该为各个组件提供良好的代码覆盖率;
  • MvcIntegrationTestFramework 在开发会话期间运行集成测试时很有用,这些测试也是日常构建的一部分;
  • 尽管基于 Selenium 的测试是自动化的,但它们速度很慢,主要是在 QA 会话期间启动,以快速验证页面和站点工作流程中没有损坏的逻辑;
  • 提示测试人员确认结果有效性时的手动验收测试主要是验证页面外观。

如果您在 Web 开发中使用 SpecFlow、Cucumber 或其他 BDD 验收测试框架,您能否分享您在不同测试类型之间进行选择的实践。

提前致谢。

4

2 回答 2

6

都是行为。

给定特定的上下文,当事件发生(在特定范围内)时,应该会发生一些结果。

范围可以是整个应用程序、系统的一部分或单个类。甚至函数也会以这种方式运行,输入作为上下文,输出作为结果(您也可以将 BDD 用于函数式语言!)

我倾向于在类或集成级别使用单元框架(NUnit、JUnit、RSpec 等),因为受众是技术人员。有时我会在评论中记录 Given / When / Then。

在场景级别,我试图找出谁真正想帮助阅读或编写场景。即使是业务利益相关者也可以阅读包含一些点和括号的文本,因此拥有像 MSpec 或 JBehave 这样的自然语言框架的主要原因是他们是否想自己编写场景,或者将它们展示给那些真的会被点和括号推迟的人和括号。

之后,我将研究框架将如何与构建系统一起使用,以及我们将如何为感兴趣的利益相关者提供适当的读写能力。

这是我写的一个例子,展示了使用简单 DSL 可以在场景中做的事情。这只是用 NUnit 编写的。

这是同一代码库中的一个示例,显示了类级别示例注释中的 Given、When、Then。

我将后面的步骤抽象化,然后将屏幕或页面放在这些步骤后面,然后在屏幕和页面中我调用我正在使用的任何自动化框架——可能是 Selenium、Watir、WebRat、Microsoft UI 自动化等。

我提供的示例本身就是一个自动化工具,因此这些场景通过演示假 gui 的行为来演示自动化工具的行为,以防万一。希望它有帮助!

于 2010-10-31T23:10:27.333 回答
2

由于验收测试是一种功能测试,因此总体目标是用它们端到端地测试您的应用程序。另一方面,您可能需要考虑测试自动化的效率(实现测试自动化需要付出多少努力)、可维护性、性能和可靠性。同样重要的是,测试自动化可以很容易地融入开发过程,以便它支持一种“测试优先”的方法(以支持由外向内的开发)。

所以这是一个权衡,对于每种情况可能会有所不同(这就是我们提供替代方案的原因)。

我很确定,今天最适合的选择是在控制器层进行测试。(也许稍后随着 UI 和 UI 自动化框架的发展,这将会改变。)

于 2010-10-25T08:04:15.297 回答