【问题标题】:Input and test data for a SpecFlow scenarioSpecFlow 场景的输入和测试数据
【发布时间】:2013-07-24 00:50:50
【问题描述】:

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

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

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

我还查看了Preparing data for a SpecFlow scenario - 我在想是否已经有一个框架可以实现插入\删除测试数据以与 SpecFlow 一起使用。

【问题讨论】:

    标签: bdd specflow


    【解决方案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,其中包含一些您可以使用的模式。

    【讨论】:

    • 嗨,我完全同意不让测试团队编写场景并让开发人员实现必要行为的部分(基本上我们就是这样做的)。我们也对应用程序的特定层进行了单元测试(所以,是的,业务测试使用模拟对象)。我不明白为什么以一种或另一种方式指定测试数据作为 SpecFlow 场景的一部分是错误的。我的验收测试之一是从几个可能的特定字段中测试搜索,因此应该提供一些测试数据来进行搜索。
    • 好的,所以假设您只使用 specflow 进行验收测试,那么隔离就不再是问题了。然而,使用数据库仍然是一个问题,它不是“错误”,但你会发现它变得非常尴尬。我在上面添加了一些要点供您考虑。
    • 在我看来,测试数据库也势在必行。否则,大部分软件都未经测试。 SSDT 和 LocalDB 等工具的引入允许我们将数据库模式和数据存储在版本控制系统中,并根据需要启动内存数据库以进行隔离测试运行。不要因为使用数据库很难就放弃使用它。
    • 好点,听起来你有一个很好的系统来缓解这个困难。所以我唯一的问题是,值得吗?对你来说听起来是这样,但是当我写这篇文章时(现在),我的很多数据库交互不过是select x,y,z from ...insert x`update x`,因为我们已经将所有逻辑移出 Db完全删除存储过程和剩下的不需要测试。
    猜你喜欢
    • 1970-01-01
    • 2011-03-16
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多