Specflow - “场景”之间的状态

时间:2011-08-23 09:25:00

标签: testing specflow uat

使用Specflow,我正在编写一套方案来模拟月度工资单,验证每个月的计算付款以及最终的年终数据。

每个月的结果是累积的,因此每个后续方案都取决于上个月的添加和扣除。付款计算通过第三方工具写入数据库,因此在方案之间创建和销毁测试数据非常昂贵。

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

我考虑的选项:

  • 通过一个场景运行整年,包括许多给定,何时,然后是断言。这导致一个难以阅读的巨大场景。
  • 为每个方案创建连接“Given”。 “鉴于:已完成对第X个月的所有付款”。这会产生大量数据库流量,因为每个方案都需要创建和销毁测试数据。

是否有更好的方法在方案之间存储状态并确保方案按所需顺序执行?

1 个答案:

答案 0 :(得分:4)

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

在您的情况下,给定部分应准备有关计算的数据,何时应计算,然后应检查该单一计算的结果。

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

这也是一种常见的技术,它不一定要像“真正的应用程序”那样(从头开始)完成。有时您可以在测试中执行快捷方式,以更快速,更轻松的方式确保先决条件。例如。你可以指定前一个月的总和,如果你的所有情景需要计算下个月(而不是让应用程序从头开始计算所有东西)。当然,您必须知道自己在做什么,并且必须考虑伪造应用程序某些方面所涉及的风险。