使用SpecFlow,我们调用了API服务层,然后与持久层进行对话。我们的大多数场景都可以很好地使用API将数据库设置为不同的状态,但是有几种场景不可能通过API进入数据库,因为它们是失败状态。
我们在想,我们可以创建一个与SpecFlow解决方案对话的层,该层反过来将数据库“伪造”成这种状态,这样我们就可以调用API层来检查我们是否得到了预期的响应。然而,就BDD而言,这是正确的吗?我对BDD的理解非常类似于ATDD,在ATDD中,您测试您的主要愉快路径和异常路径,并且应该对细粒度内容进行单元测试。
如果您不能通过API执行某些操作,那么它是否应该在BDD场景中进行测试?
发布于 2014-12-09 19:38:05
我不认为这样做有什么问题。
实际上,您的Given步骤应该能够完成必要的工作,以便在测试需要时将系统置于测试设置之下。您正在测试的是When并使用Then对其进行验证。
如果这些给定的步骤总是能够通过API完成设置,那么这两个步骤都有很好的测试覆盖率,但是在某些情况下(正如您已经描述的那样),您无法使用API轻松地使系统进入所需的状态。在这种情况下,您可能需要将给定的步骤直接插入到数据库中,或者调用一些测试服务来设置状态。
您还可能会发现,如果您的操作结果无法通过API公开可见,则需要对您的Then步骤执行类似的操作。
您可能还会发现,实际上调用API太慢或太长,无法完成所需的设置(特别是对于复杂的工作流),因此您可以选择在给定的步骤中将数据直接插入数据库,以便测试更快,并且不需要进行如此复杂的设置。
但是,请注意,如果数据库模式更改,则可能需要更新API实现并更新直接插入数据的步骤。
这个成本是否值得承担是你必须决定的事情。
https://stackoverflow.com/questions/27386359
复制相似问题