gpt4 book ai didi

java - 为什么我不应该 mock 文件或路径

转载 作者:行者123 更新时间:2023-11-29 07:31:41 32 4
gpt4 key购买 nike

我一直在努力理解 jmockit Mocking API 支持的类的雷区。我发现我认为是 File 的错误,但问题只是说“不要模拟文件或路径”而没有解释。这里有人可以帮助我理解为什么某些类(class)不应该被 mock 以及我应该如何解决这个问题。我试图通过错误报告为图书馆做出贡献,但我提交的每一份报告都让我更加困惑。请原谅我的无知,但如果有人能指出禁止模拟等的基本原理。我将不胜感激。

最佳答案

我不确定是否存在万无一失的规则列表。在这些事情上总是有一定程度的知识和品味。教条通常不是一个好主意。

我投票结束这个问题,因为我认为很多都是意见。

但话虽如此,我会尝试一下。

单元测试应该是关于测试单个类,而不是类之间的交互。这些称为集成测试。

如果您的对象正在调用其他远程对象(如服务),您应该模拟这些对象以返回测试所需的数据。这个想法是服务和他们的客户也应该在他们自己的单元测试中单独测试。在测试依赖于它们的类时,您无需重复这些。

在我看来,这条规则的一个异常(exception)是数据访问对象。在不连接到远程数据库的情况下测试其中一个是没有意义的。您的测试需要证明代码的正确运行。在数据访问对象的情况下,这需要数据库连接。这些应该被写成事务性的:种子数据库,执行测试,并反转测试的 Action 。完成后数据库应处于相同状态。

一旦您的数据访问对象被证明工作正常,所有使用它们的客户端都应该模拟它们。无需重新测试。

您不应该在 JVM 中模拟类。

您特别询问了关于 File 或 Stream 的原因 - 这是一个原因。接受或忽略它。

您不必测试 JVM 类,因为 Sun/Oracle 已经这样做了。你知道他们的工作。您希望您的类使用这些类,因为失败的测试将暴露必要文件不可用的事实。模拟不会告诉我我忘记将所需的文件放入我的 CLASSPATH 中。我想在测试期间而不是在生产中找出答案。

另一个原因是单元测试也是文档。这是为其他人展示如何正确使用您的类(class)的现场演示。

关于java - 为什么我不应该 mock 文件或路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41308463/

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