我正在编写junit test来测试BaseClass
方法。该方法使用超类成员。BaseClass
构造函数调用super(arg1, arg2)
。
在super(arg1,arg2)构造函数中,有一个依赖项注入器设置了一个私有成员
超级阶级。
当我运行测试时,由于未设置依赖项,因此super()抛出
例外。我只想在super()中模拟该语句,该语句通过依赖项注入来设置私有成员。如何处理模仿?
最佳答案
现场注入始终是测试的问题。因此,只要您有选择,就选择构造函数注入。
您可以启动依赖项注入器,并使其注入模拟而不是真实类。解决方案将取决于您实际使用的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
是该专用字段的类型。