gpt4 book ai didi

java - 如果使用 Cucumber 将输出发送到数据库,我该如何测试组件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:44:35 24 4
gpt4 key购买 nike

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

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

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

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

这个问题有正确答案吗?我们在这里遗漏了什么吗?谢谢。

最佳答案

我想说用 REST 调用验证是在这里进行验证的正确方法。否则它就不是真正的黑盒测试,并且您的测试将取决于内部实现细节(您的数据库结构)。你通常想看看你的应用程序对“外部世界”有什么影响,而你的数据库不是这个 IMO 的一部分。

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

如果它是一个单元测试,你的组件的依赖应该被模拟。然后,您可以使用模拟来验证您的组件是否正确调用了存储库。

如果我误解了什么,请告诉我。 :)

关于java - 如果使用 Cucumber 将输出发送到数据库,我该如何测试组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29008277/

24 4 0
文章推荐: android - Firebase for android 突然无法在我的测试设备上运行
文章推荐: java.lang.NoClassDefFoundError :-Could not initialize class org. apache.http.impl.conn.ManagedHttpClientConnectionFactory
文章推荐: android - react native 分析。 Systrace 未显示 JS 和 native 模块线程
文章推荐: java - 如何避免 Set 中的重复