如何测试私有注入对象?
有一个代码:
public class MyClass {
@Inject
private SecondClass secondClass;
public boolean isInProgres() {
if (secondClass.isTaskInProgress()) {
return true;
}
return false;
}
}
在测试中,我想做类似的事情:
when(secondClass).doReturn(true);
assertThat(MyClass.isInProgres(), equalTo(true));
但是如果将 secondClass 传递给构造函数,那么我可以覆盖我传递的对象方法的行为。
因此,在测试中,我创建了对象 MyClass 并且它注入了不清楚是什么并且不检查测试的工作。
最好改掉这种注入私有字段的习惯。最好的方法是通过构造函数推送注入,那么你在测试中不会有任何问题:
过去的变化 - 通过二传手。但这是如果你不争取不变性:
更邪恶的是使用 SpringJUnit4ClassRunner 进行测试。然后我们声明上下文:
最大的罪恶是反射: