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