[英]Pass real object and mock object in constructor
我有一个AccountDetails
构造函数,如下所示。
private final AccountDetailsRestClient accountDetailsRestClient;
private final ConstantMapService constantMapService;
private CalculationMap calculationMap;
public AccountDetails(final AccountDetailsRestClient accountDetailsRestClient, final ConstantMapService constantMapService) {
this.accountDetailsRestClient = accountDetailsRestClient;
this.constantMapService = constantMapService;
initializeConstantsData();
}
private void initializeConstantsData() {
if (this.calculationMap == null) {
this.calculationMap = constantMapService.getMap(java.time.LocalDate.now());
}
}
使用 Mockito 我无法初始化所有 3 个对象 accountDetailsRestClient、constantMapService、calculationMap。 如果 accountDetailsRestClient 不为 null,则 constantMapService 为 null,反之亦然。
模拟测试类:
@RunWith(MockitoJUnitRunner.class)
public class AccountDetailsTest {
@Mock
private AccountDetailsRestClient accountDetailsRestClient;
@Mock(answer = RETURNS_DEEP_STUBS)
private CalculationMap calculationMap;
@InjectMocks
private final AccountDetails sut = new AccountDetailsTestImpl(new ConstantMapServiceMock());
@Test
public void testMethod() {
//left it blank to check constructor issue first
}
class AccountDetailsTestImpl extends AccountDetails {
AccountDetailsTestImpl(final ConstantMapService constantMapService) {
super(accountDetailsRestClient, constantMapService);
}
}
}
但是 accountDetailsRestClient 现在在构造函数中为空。
如何在不使用 PowerMock 的情况下解决此问题。 通过更改类中的代码或更改模拟测试类?
不要使用@InjectMocks
并简单地手动做事,就像你几乎已经:
AccountDetails sut = new AccountDetails(mockDependency, realObject);
由于@Mock
和类似的自动连接必须在类实例化后发生,如果您需要在初始化期间引用模拟,请以编程方式创建它:
AccountDetailsRestClient mockRestClient = mock(AccountDetailsRestClient.class);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.