3

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

4

1 回答 1

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));

whileTestObject是您要测试的类,injected注入某些东西的私有字段是InjectedType该私有字段的类型。

于 2013-07-11T13:17:56.147 回答