我正在编写junit测试来测试BaseClass
方法。该方法使用超类成员。BaseClass
构造函数调用super(arg1, arg2)
。在超级(arg1,arg2)构造函数中,有一个依赖项注入器正在设置专用成员超一流的。当我运行测试时,由于没有设置依赖项,super()正在抛出例外我只想模拟super()中的语句,该语句通过依赖注入设置私有成员。如何处理mockito?
字段注入对于测试来说总是一个问题。因此,只要你有选择,就选择构造函数注入。
您可以启动依赖项注入器,使其注入一个mock而不是一个真正的类。解决方案将取决于您实际使用的DI框架(guice,cdi,…)对于guice,您可以使用jukito,例如cdi Arquillian。但是它降低了测试执行速度,并增加了测试类的复杂性。
作为一种选择,您可以在测试类的实例上反映私有字段,只需设置一个mock。类似于:
instance = new TestObject();
Field injected = TestObject.class.getDeclaredField("injected");
injected.setAccessible(true);
injected.set(instance, mock(InjectedType.class));
而TestObject
是要测试的类,injected
是注入某些内容的私有字段,InjectedType
是该私有字段的类型。