1 回答
TA贡献1788条经验 获得超4个赞
一种选择是将您自己的(模拟的)实现替换SomeOtherClassProcessor为MyClass使用反射:
MyClass myClass = new MyClass();
SomeOtherProcessor01 mockProcessor01 = mock(SomeOtherProcessor01.class);
// reflection bit: find the field by its name
// handle NoSuchFieldException
Field someProcessorField = MyClass.getDeclaredField("someOtherProcessor01");
// the field is declared as private, so make it accessible in order to work with it
someProcessorField.setAccessible(true);
// now set your mocked processor into the field.
// First argument is the object to change; second argument - new value for the field
someProcessorField.set(myClass, mockProcessor01);
附言。使用 PowerMock 和/或反射是向糟糕的设计投降(根据 Timothy :)。您不应该依赖尚未经过充分测试的代码,如果是,您不应该再次尝试对其进行测试。假设您的测试实际上揭示了一个错误——如果您不控制代码,您将如何修复它?假设 Java 11 变成了一个东西,禁止你使用反射。假设您正在测试的代码发生变化并且字段被重命名 - 通过反射,您没有编译时安全......潜在问题列表继续
添加回答
举报