【发布时间】:2015-08-18 10:00:35
【问题描述】:
我正在开发一个使用 Gson 的大型 Android 项目。方法fromJson() 在很多文件中被调用了几十次。每次调用此方法时,我都需要提供一些特殊情况测试。
我不想在每次使用此方法时都重复测试,而是遵循DRY 原则,并以某种方式简单地覆盖fromJson() 方法。
我的第一个想法是创建一个 Gson 的子类并覆盖该方法,但我仍然需要进行数十次(也许数百次)更改才能使其正常工作。但即使我愿意做这项工作,Gson 是final,因此无法扩展。
第二个想法:有可能改变 Gson 库代码。但我不想走这条路,因为我担心我可能会破坏原本可以完美运行的东西。
这是我以前从未涉足过的 Java 领域。有人有什么建议吗?
【问题讨论】:
-
你能用Aspectj吗?
-
从 Mockito 尝试 Spy:docs.mockito.googlecode.com/hg/1.9.5/org/mockito/Spy.html - 您可以只重写一个方法,在其中添加一些逻辑,然后调用真正的方法。
-
我既没有使用过 Aspectj 也没有使用过 Mockito。我不愿意在这个项目中添加另一个库,但我会花一个小时研究这些可能性。
-
@ScottBiggs 不确定 java 的反射是否与使用 android SDK 编译时的反射工作方式相同。但这里有一个很好的答案,它展示了你实际上如何“破解”这个库的最后一个字段:stackoverflow.com/a/3301720
-
@CausingUnderflowsEverywhere:很有希望。不幸的是,我的反思知识非常有限。
标签: java android methods overriding