Input and test data for a SpecFlow scenario
我最近开始使用 SpecFlow,我需要澄清 2 个基本问题,以确认我的方法是正确的:
据我了解,所有输入数据(场景的测试参数)必须由测试人员提供,测试数据(测试场景中涉及的表格的输入数据)必须相同
是否有任何现有的工具可以快速生成测试数据(将其插入数据库)?我使用实体框架作为数据访问层的一部分。我想知道一些工具可以从文件中读取数据,或者可能是一些桌面应用程序为表的字段提供值(它也可以生成一个文件,其他工具可以从中读取所有数据并生成所有所需的对象等)。
我还查看了为 SpecFlow 场景准备数据 - 我在想是否已经有一个框架可以实现插入\\\\\\\\删除测试数据以与 SpecFlow 一起使用。
我不认为你在正确的Rails上。 SpecFlow 是一个 BDD 工具,但在某些方面它只涵盖了部分流程。阅读 http://lizkeogh.com/2013/07/01/behavior-driven-development-shallow-and-deep/ 看看这些场景是否熟悉?
为了继续前进,我建议您从 http://dannorth.net/introducing-bdd/ 开始,以了解这一切是如何开始的。现在让我们考虑您的观点;
测试人员提供所有测试数据。好吧,是的,不是的。这个想法是,在您和功能专家之间,您可以进行对话,提供开发功能所需的所有示例。如果你不参与那次谈话,那么是的,所有数据都来自另一方,但它的质量可能不会像你能够提出正确的问题并指导对话,因此数据遵循您也可以编写测试代码的结构。
举个例子,当我第一次开始使用 BDD 时,我认为我可以让业务专家编写纯文本场景文件,而开发过程中的输入更少,但实际上这些文档往往不如我们参与时有用。不是因为他们写不出像样的规范,而是因为他们无法重构它们以重用绑定等。我们仍然需要将我们的技能添加到流程中。
为什么数据要进入数据库?一个好的测试被隔离到它正在测试的范围内。对于 UI 层测试,这意味着我们没有数据库。对于业务层测试,我们也不应该依赖数据库来获取数据。
在实践中,数据库是测试中最困难的事情之一,因为一旦数据的任何部分发生更改,就会导致级联测试失败。
相反,我建议您缩小功能并在场景或绑定中为您的测试提供数据。这也让你的谈话更容易,因为第 50 行测试包不是任何一方都会记住的。 ;-) 我建议改为尝试为您提供数据身份,因此"bob"可能是您可以讨论的测试中的个人,并且双方都明白是什么让他成为一个有趣的例子。
祝你好运:-)
更新:关于在测试期间使用数据库,我的经验是有很多复杂性使其成为一个难以选择的选择。考虑这些点,
- 您将如何在测试之间重置数据状态?
- 如果一个/一些测试失败,你将如何重置状态?
- 如果您正在使用分支,甚至只是两个开发人员同时进行更改,您将如何支持多个测试数据集?
- 您将如何处理同时运行的两个测试实例(不要忘记构建服务器)?
查看这个问题 SpecFlow Integration Testing with Database Patterns,其中包含一些您可以使用的模式。