4

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

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

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

我考虑过的选项:

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

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

4

1 回答 1

5

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

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

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

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

于 2011-08-23T14:49:34.687 回答