java - 模拟复杂的 Java 对象
问题描述
有没有办法在不修改源代码的情况下模拟一个非常复杂的对象,在一个类中静态初始化?
代码看起来像这样。
public class SomeType {
private static final ComplexType TYPE = new ComplexType();
public SomeType() {}
public Object process(int id, String content) {
...
TYPE.something();
...
}
}
尝试SomeType
通过调用来测试类的行为
new SomeType().process(1, "<some text>");
需要以某种方式ComplexType
模拟对象,该对象在其定义中静态初始化了许多其他复杂对象,以及初始化期间的网络密集型操作。结果,mock()
或者spy()
不起作用,因为ComplexType
对象在引用SomeType
类时被初始化。看来,要模拟ComplexType
对象,需要准备所有复杂的依赖项,这使得测试代码变得复杂。
建议的另一种方法是通过反射修改static final
字段。TYPE
但是这也不起作用,因为它发生在初始化之后TYPE
,所以初始化引起的错误已经发生了。
解决方案
推荐阅读
- java - Android Studio 找不到符号类/包不存在/wikitude
- c++ - 标记调度 - 无法推断模板参数
- css - 如何将 bootstrap-vue 主题颜色设置为 css 变量?
- python - Python Pandas:嵌套字典
- python - sqlite3 fetchone() 在 Windows 上返回 sqlite3.Row 类型,但在 Mac 上返回元组
- python - Python:在 pdf 文件目录上运行打印文件应用程序时出现 pywintypes.error
- vue.js - 带有 VSCode 的 Vue.js 项目上的 HTML 和 CSS 注释标签错误
- c# - 在 UserControl 中使用 MainWindow 函数的正确方法是什么
- javascript - Chart.js 缩放 x 值
- php - laravel 内爆映射集合与链接(一个标签)