Java `final` 类和模拟

标签 java unit-testing maven mocking mockito

<分区>

我正在开发一款编程游戏,玩家可以访问抽象类并扩展它来控制机器人的行为。因为它是一个编程游戏,所以我正在努力保护我的游戏基础设施,这样玩家就不会弄乱游戏,而不仅仅是我给他们的类(class);为此,我将大部分类(class)设为 final,但现在我无法在单元测试中模拟它们 (mockito + testNG)。

所以我想知道,我该如何解决这个问题?有没有办法让类非最终测试,然后以某种方式在构建周期的后期自动“final-ize”它们(我使用 maven 以防它与答案)。我不想添加另一个外部库或更改我的模拟库。
如果这不可能,那么第二个问题:使一个类 final 真的安全吗? 我看到一些库可以从中删除 final 分类器字节码,这让我觉得如果 final 可以从已经编译的类中删除,那么它可能就没用了

最佳答案

首先,您无法通过声明“最终版”来阻止人们扰乱您的游戏。有一些反射技巧和整个代码生成库,只是稍微有点不方便来解决这个问题。

所以,输掉 final ,然后你可以使用 jmock 或任何你喜欢的库来制作模拟。

关于Java `final` 类和模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139581/

相关文章:

java - 项目不在 Eclipse 构建路径中

java - 如果没有 Maven 或 Ivy,Gradle 在哪里管理依赖关系?

java - 试图想出一种算法来对西类牙语单词进行排序

java - 是什么导致任意 JTree 节点错误地显示它们的名称,我该如何阻止它发生?

C++ 谷歌测试除以零

java - 如何获取在 testng 拆卸方法中运行的测试方法的名称?

java - 如何使用 Jenkins 中的插件覆盖属性文件?

java - log4j - 即时创建多个文件

java.lang.ClassCastException : On custom composite component

Python模拟多个返回值