如何使用Cucumber输出到数据库的测试组件?

时间:2015-03-12 11:14:23

标签: java testing tdd cucumber domain-driven-design

最近我的团队讨论了如何正确测试我们系统的一个组件,其中输出存储在数据库中。我们使用DDD来创建我们的系统,因此组件最终会与一个存储库进行通信,该存储库实现了与MongoDB通信的不同存储。作为测试框架,我们使用Cucumber,我们用于测试的数据库是mongo的内存版本。

到目前为止,我们所有场景都有一个命令作为输入,输出是一个事件,因此我们的断言是在事件上完成的。但现在我们有一个场景,处理事件并将结果存储在数据库中。在此之后,可以使用休息调用检索结果。

讨论是关于测试这两个最后场景的方法。对于某些人来说,正确的方法是在处理事件后检查内存数据库,因为这是系统的输出。系统的最终部分是商店,它们必须进行测试以及部分方案。测试内存数据库包含的内容是正确的方法,因为商店仍在使用相同的生产就绪逻辑来编写输出。为方便起见,我们会使用存储库来检索此数据,因为这样更容易,即使我们需要使用与手头方案无关的内容。

另一方面,对于某些人,我们不应该检查数据库,因为这是我们不应该访问测试的另一个组件。相反,因为在这种情况下,其余调用只是检索数据,我们应该使用rest调用作为测试的一部分来验证输出。这样,我们的场景将包括这两部分,存储和检索而不是分割测试。

对此有正确的答案吗?我们在这里遗漏任何一点吗? 谢谢。

1 个答案:

答案 0 :(得分:3)

我说用REST调用验证是正确的方法。否则它不会真的是黑盒测试,你的测试将取决于内部实现细节(你的数据库结构)。您通常希望看到您的应用程序对外部世界的影响,并且您的数据库不是此IMO的一部分。

这是假设您正在创建的测试旨在进行黑盒测试。如果它是集成测试(我猜是灰色框?)那么IMO使用存储库检查数据库可能是个更好的主意。

如果它打算作为单元测试,则应该模拟组件的依赖关系。然后,您可以使用模拟来验证组件是否正确调用了存储库。

如果我误解了某些内容,请告诉我。 :)