1

我最近开始使用 SpecFlow,我需要澄清 2 个基本问题,同时确认我的方法是正确的:

  1. 据我了解,必须由测试人员提供所有输入数据(场景的测试参数),测试数据(测试场景中涉及的表的输入数据)相同

  2. 是否有任何现有的工具可以快速生成测试数据(将其插入数据库)?我使用实体框架作为数据访问层的一部分。我想知道一些工具可以从文件中读取数据,或者可能是一些桌面应用程序来为表的字段提供值(它也可以生成一个文件,其他工具可以从中读取所有数据并生成所有必需的对象ETC)。

我还查看了为 SpecFlow 场景准备数据- 我在想是否已经有一个框架可以实现插入\删除测试数据以与 SpecFlow 一起使用。

4

1 回答 1

1

我不认为你走在正确的轨道上。SpecFlow 是一个 BDD 工具,但在某些方面它只涵盖了部分流程。阅读http://lizkeogh.com/2013/07/01/behavior-driven-development-shallow-and-deep/看看这些场景是否听起来很熟悉?

为了继续前进,我建议您从http://dannorth.net/introducing-bdd/开始,以了解这一切是如何开始的。现在让我们考虑您的观点;

  1. 测试仪提供所有测试数据。好吧,是的,不是的。这个想法是,在您和功能专家之间,您可以进行对话,提供开发功能所需的所有示例。如果您不参与该对话,那么是的,所有数据都将来自另一方,但很有可能它不会像您能够提出正确的问题并指导对话那样高质量数据遵循您也可以编写测试代码的结构。举个例子,当我第一次开始使用 BDD 时,我认为我可以让业务专家编写纯文本场景文件,而开发过程中的输入更少,但实际上这些文档往往不如我们参与时有用。不是因为他们写不出像样的规范,

  2. 为什么数据会进入数据库?一个好的测试被隔离到它正在测试的范围内。对于 UI 层测试,这意味着我们没有数据库。对于业务层测试,我们也不应该依赖数据库来获取数据。在实践中,数据库是测试中最困难的事情之一,因为一旦数据的任何部分发生更改,就会导致级联测试失败。相反,我建议您缩小功能并在场景或绑定中为您的测试提供数据。这也让你的谈话更容易,因为第 50 行测试包不是任何一方都会记住的。;-) 我建议改为尝试为您提供数据身份,因此“鲍勃”可能是您可以讨论的测试中的个人,并且双方都明白是什么让他成为一个有趣的例子。

祝你好运 :-)

更新:关于在测试期间使用数据库,我的经验是有很多复杂性使其成为一个困难的选择。考虑这几点,

  • 您将如何在测试之间重置数据状态?
  • 如果一个/一些测试失败,你将如何重置状态?
  • 如果您正在使用分支,甚至只是两个开发人员同时进行更改,您将如何支持多个测试数据集?
  • 您将如何处理同时运行的两个测试实例(不要忘记构建服务器)?

看看这个问题SpecFlow Integration Testing with Database Patterns,其中包括一些您可以使用的模式。

于 2013-07-22T13:37:44.200 回答