【发布时间】:2019-01-04 07:36:10
【问题描述】:
我有一个使用依赖注入的类,并且有一个初始化附加字段的非默认构造函数。基本上这个类看起来像这样:
public class NonDefaultConstructor {
private final String name;
@Inject
private SomeService service;
public NonDefaultConstructor(ParameterObject po) {
this.name = po.getName();
}
}
有了这个ParameterObject:
public class ParameterObject {
private String name;
public String getName() {
return name;
}
}
我想创建一个 Mockito 测试,该测试注入服务 SomeService 的模拟和构造函数参数 ParameterObject 的模拟。此尝试不起作用,因为它试图模拟尚未初始化的字段上的行为。
public NonDefaultConstructorTest {
@Mock
private SomeService service;
@Mock
private ParameterObject po;
@InjectMocks
private NonDefaultConstructor classUnderTest;
@BeforeEach
private void setup() {
given(po.getName()).willReturn("name")
MockitoAnnotations.initMocks(this);
}
}
在setup 方法中创建ParameterObject 也不起作用,因为这也需要在那里构造NonDefaultConstructor,然后SomeService 不会被注入。
我知道这可以通过使用反射手动注入字段来解决,但我更喜欢更优雅的解决方案。
【问题讨论】:
标签: java dependency-injection constructor mockito