在BDD中绕过服务层并更改测试设置的数据状态是否正确?

时间:2014-12-09 18:38:08

标签: api tdd bdd specflow atdd

使用SpecFlow,我们调用了我们的API服务层,然后与持久层进行通信。我们的大多数场景都可以很好地使用API​​将数据库设置为不同的状态,但是有一些场景无法通过API将数据库导入,因为它们是失败状态。

我们认为我们可以创建一个SpecFlow解决方案与之对话的层,然后将数据库“捏造”到该状态,以便我们可以调用API层来检查我们是否获得了预期的响应。但就BDD而言,这是正确的吗?我对BDD的理解与ATDD非常相似,在那里你测试主要的快乐路径和异常路径,细粒度的东西应该进行单元测试。

如果您无法通过API执行某些操作,是否应该在BDD方案中进行测试?

1 个答案:

答案 0 :(得分:1)

我认为这样做没有任何问题。

事实上,您的Given步骤应该能够执行必要的操作,以便在测试需要时让系统处于测试设置状态。您正在测试的是When并使用Then验证它。

如果这些给定的步骤始终能够通过API进行设置,那么很好,您可以获得两者的良好测试覆盖率,但可能存在(如您所述)您无法轻松将系统纳入其中的情况使用API​​的所需状态。在这种情况下,您可能已将给定的步骤直接插入数据库,或调用某些测试服务来设置状态。

如果您的操作结果未通过API公开显示,您可能还会发现需要对Then步骤执行类似的操作。

您可能还会发现实际调用您的API太慢或太长时间以进行您需要的设置(特别是对于复杂的工作流程),因此您可以选择在给定的步骤中将数据直接插入数据库,以便您的测试更快,不需要经历如此复杂的设置。

请注意,这本身就有成本,因为如果您的数据库架构发生了变化,那么您可能需要更新API实现并更新直接插入数据的步骤。

这笔费用是否值得承担是你必须要做的事情。