1

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

我们想我们可以创建一个与 SpecFlow 解决方案对话的层,这反过来又将数据库“捏造”到该状态,这样我们就可以调用 API 层来检查我们是否得到了预期的响应。但是,就 BDD 而言,这是否正确?我对 BDD 的理解与 ATDD 非常相似,您可以在其中测试主要的快乐路径和异常路径,并且应该对细粒度的东西进行单元测试。

如果你不能通过 API 做某事,难道不应该在你的 BDD 场景中进行测试吗?

4

1 回答 1

1

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

事实上,您的Given步骤应该能够根据您的测试需要执行使系统处于测试状态所需的操作。您正在测试的是When并使用Then.

如果这些给定的步骤总是能够通过 API 进行设置,那么很好,你可以得到很好的测试覆盖率,但是可能有一些情况(如你所描述的)你不能轻易地让系统进入所需的状态使用API。在这种情况下,您可能会将给定的步骤直接插入到数据库中,或者调用一些测试服务来设置状态。

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

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

请注意,如果您的数据库架构发生更改,那么您可能需要更新 API 实现并更新直接插入数据的步骤。

这笔费用是否值得承担是您必须决定的事情。

于 2014-12-09T19:38:05.420 回答