【问题标题】:Specflow - State between "scenarios"Specflow - “场景”之间的状态
【发布时间】:2011-08-23 22:49:34
【问题描述】:

使用 Specflow,我正在编写一套模拟每月工资单的场景,验证每个月的计算付款,最后验证年终数字。

每个月的结果都是累积的,所以后续的每个场景都取决于上个月的加减。支付计算通过第三方工具写入数据库,因此在场景之间创建和销毁测试数据的成本很高。

根据我的测试经验,我知道并不总是可以确保测试的执行顺序。我可以使用一些场景命名约定来控制执行顺序,但不能保证远程测试运行程序会按字母顺序运行测试。

我考虑过的选项:

  • 通过一个场景运行一整年,其中包括大量给定、何时、然后的断言。这会产生一个难以阅读的庞大场景。
  • 为每个场景创建一个串联“Given”。 “假设:X 月的所有款项都已支付”。 这会产生大量数据库流量,因为每个场景都需要创建和销毁测试数据。

是否有更好的方法来存储场景之间的状态并确保场景以所需的顺序执行?

【问题讨论】:

  • 如果您将其映射到您的问题上并且为您想要执行的测试类型选择更高级别的抽象,您可能还会发现此答案很有帮助:stackoverflow.com/a/23375756/936469

标签: testing specflow uat


【解决方案1】:

依赖场景的执行顺序是一种反模式,应该避免。出于同样的原因,测试运行程序通常不提供任何机制来控制执行顺序。这也违反了可执行规范的概念:场景本身应该是可理解的(和可执行的)。

在您的情况下,Given 部分应为相关计算准备数据,When 应计算,然后应检查该单个计算的结果。

为了减少执行时间,也许您可​​以尝试以测试不同方面的方式选择“重要”场景。可能没有必要每个月1-11测试。您可以对第一个月的工资单进行一次测试,对第二个月进行一次测试,一次结束一整年,一次开始新的一年,等等。

Given 不一定要以与“实际应用程序”相同的方式完成(从头开始),这也是一种常见的技术。有时您可以在测试中做捷径,以更快、更轻松的方式确保先决条件。例如。如果这是您的方案需要计算下个月的全部内容,您可以指定上个月的总和(而不是让应用程序从头开始计算所有内容)。当然,您必须知道自己在做什么,并且必须考虑伪造应用程序某些方面所涉及的风险。

【讨论】:

  • 感谢您的反馈。我决定采用“一年中一年”的情景。假设以前的每月付款计算不成立,那么该计算太棘手而无法模拟。
  • “计算”太难模拟了?上个月的结果肯定可以是静态数据 - 实际上,正是您尝试在步骤之间存储的数据?
  • 我知道依赖测试顺序是一种反模式,但对于所有类型的测试都是如此。对于单元测试,我同意,因为如果你依赖另一个测试,你就会从单元中流血。对于验收测试,我认为这条规则可能会变得更加灰色,我可以想到很多情况,定义这些测试的运行顺序非常有用。如果一个测试需要捕获数据,而另一个测试检查数据的捕获,至少对我来说,我希望能够只使用前一个测试捕获的数据。这是我的看法。 Prolly 错了
  • 尽管考虑到 Specflow 的工作原理,分享 When 并没有增加太多工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-24
  • 1970-01-01
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
相关资源
最近更新 更多