gpt4 book ai didi

java - 使用测试实体管理器是合法的测试实践吗?

转载 作者:行者123 更新时间:2023-11-28 20:55:11 24 4
gpt4 key购买 nike

我的高级开发人员告诉我,但对 Hibernate 的经验较少,将实体管理器连接到单元测试套件以用于设置数据库是不合法的做法。 ......但我持怀疑态度,因为我已经在几个完成此操作的地方工作过。请注意,Hibernate 已用于设置测试 H2 数据库。

我被要求“证明”它是合法的。我怎样才能做到这一点?这是社区标准的做法吗?有谁知道我可以使用的好链接?虽然我自己也在寻找这样的东西,但我在这里闻到了一点宗教气息,所以我可能需要一个真正的 killer 或者可能需要大量这样的东西。

最佳答案

您的高级开发人员指的是适当的白盒测试。

当您进行单元测试时,您希望测试给定的单元。当您开始涉及数据库或某些外部 Web 服务之类的东西时,这会变得更加复杂。然而,重点仍然是:您仍然只想测试单元测试所针对的一段代码;不是一些数据库。

您是否对 Hibernate 或您的数据库有信心是无关紧要的。您需要“模拟”数据库事务、EntityManager 等。我会按照 EasyMock 的思路研究一些东西。真的完全取决于您要使用什么。如果您在谷歌上搜索“mock junit”,您可能会得到一个结果列表,您可以在其中选择适合您的框架。不过,适合您的框架稍微超出了本次讨论的范围。

一旦你找到你想要使用的东西,想法就是在你的单元测试内部,而不是获得一个真正的 EntityManager,你有一个模拟对象,你以这样的方式模拟它:

the documentation says that A will happen if I invoke method C, so I told the mock framework about it so it can fake it for me, so I don't have to rely on things outside of my Unit test

之所以要像这样模拟一个对象,是因为您不能依赖不在该单元内的任何其他代码来正常工作。不管你期望什么,不管文档说你应该期望什么,如果代码写得不好,或者在你的情况下,如果数据库由于某种原因失败,那么单元测试将失败。您可以看到这可能是个问题,因为您的函数可能会完美执行,但由于数据库失败而失败。这不是单元测试的工作方式 - 这就是为什么它被称为单元测试......一次只测试一个单元。

总是模拟复杂的对象或功能。留下像 String#equals(java.lang.Object) 这样的东西是可以的。通过这样做,您想找到一个好的中间立场。如果你 mock 太多你的单元测试,那么你就会对单元测试失去信心,因为你的单元测试实际上并没有调用你的任何实际代码。如果你的 mock 不够多,那么你就没有正确地进行单元测试,并且你的单元测试依赖于与你的代码无关的东西(即数据库故障、第三方代码编写不当等)。

您的高级开发人员是正确的。如果您在单元测试中使用真正的 EntityManager,那么您实际上根本没有在进行单元测试。

关于java - 使用测试实体管理器是合法的测试实践吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26329977/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com