嘲弄/监视超级私人成员

时间:2013-07-11 11:36:27

标签: mockito stub spy

我正在编写junit test来测试BaseClass方法。该方法使用超类成员。 BaseClass构造函数调用super(arg1, arg2)。 在super(arg1,arg2)构造函数中,有一个依赖注入器设置私有成员 超级班。 当我运行测试时,由于未设置依赖项,super()正在抛出 例外。我想只在mock()中模拟那个使用依赖注入设置私有成员的语句。如何处理mockito?

1 个答案:

答案 0 :(得分:2)

现场注入始终是测试的问题。因此,只要您有选择,请选择构造函数注入。

您可以启动依赖注入器并使其注入模拟而不是真实类。解决方案将取决于您实际使用的DI框架(guice,cdi,...)对于guice,您可以使用jukito,例如cdi Arquillian。但它会降低测试执行速度并增加测试类的复杂性。

作为替代方案,您可以在测试类的实例上反映私有字段,只需设置模拟。类似的东西:

instance = new TestObject();
Field injected = TestObject.class.getDeclaredField("injected");
injected.setAccessible(true);
injected.set(instance, mock(InjectedType.class));

虽然TestObject是您要测试的类,injected私有字段,其中某些内容被注入InjectedType该私有字段的类型。