Новое в инфраструктуре Mockito.
RcExtensionInfo rcExtensionInfo = rcApiClient.get(
RC_OFFICE_EXTENSION_INFO_API_PATH,
pathVariablesForExtensionInfoRequest,
customRequestHeaders,
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcExtensionInfo.class
);
Приведенный выше код мне нужно протестировать с помощью mockito, и я хочу реальный объект RcExtensionInfo
, потому что этот объект используется в моем коде для нескольких методов получения. В настоящее время невозможно вызвать метод получения из-за null
. Поскольку мы знаем, что если мы будем издеваться над каким-либо методом, то значением по умолчанию будет null
. Но я думаю, что мы можем присвоить объект из метода thenReturn
этой ссылке.
Тестовый код:
RcAccountInfo rcAccountInfo = new RcAccountInfo();
rcAccountInfo.setMainNumber("+198473621");
when(rcApiClient.get(RC_OFFICE_ACCOUNT_INFO_API_PATH,
new HashMap<String, String>(), new HashMap<String, String>(),
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcAccountInfo.class)).thenReturn(rcAccountInfo);
Полный тестовый класс:
@RunWith(MockitoJUnitRunner.class)
public class SIPServiceTest {
private static final String RC_OFFICE_EXTENSION_INFO_API_PATH = "/account/{RCAccountId}/extension/{RCExtensionId}";
private static final String RC_OFFICE_ACCOUNT_INFO_API_PATH = "/account/{RCAccountId}";
@Mock
private JwtService jwtService;
@Mock
private EvApiClient cfApiClient;
@Mock//(answer = Answers.RETURNS_DEEP_STUBS)
private RcApiClient rcApiClient;
@InjectMocks
private SIPService sipService;
@Mock
private Claims claims;
@Test
public void testMainNumAndExtNumber() throws ServiceException, URISyntaxException {
//Given
when(claims.get(JwtUtils.ClaimKeys.IS_SSO_LOGIN, Boolean.class)).thenReturn(true);
when(claims.get(JwtUtils.ClaimKeys.RING_CENTRAL_ACCOUNT_ID, String.class)).thenReturn("+198473621");
when(String.valueOf(claims.get(JwtUtils.ClaimKeys.RING_CENTRAL_USER_ID, Long.class))).thenReturn("102");
RcAccountInfo rcAccountInfo = new RcAccountInfo();
rcAccountInfo.setMainNumber("+198473621");
when(rcApiClient.get(RC_OFFICE_ACCOUNT_INFO_API_PATH,
new HashMap<String, String>(), new HashMap<String, String>(),
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcAccountInfo.class)).thenReturn(rcAccountInfo);
RcExtensionInfo rcExtensionInfo = mock(RcExtensionInfo.class);
doReturn(rcExtensionInfo).when(rcApiClient).get(RC_OFFICE_EXTENSION_INFO_API_PATH,
new HashMap<String, String>(), new HashMap<String, String>(),
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcExtensionInfo.class);
when(sipService.getMainNumberAndExtensionNumber(claims))
.thenReturn(new RcOfficeMainAndExtensionNumber());
//Then
//verify(sipService).getMainNumberAndExtensionNumber(any());
//assertEquals("123", "123");
}
}
Вышеуказанные 3 when
работают отлично.
Метод проверки:
public RcOfficeMainAndExtensionNumber getMainNumberAndExtensionNumber(Claims claims) throws ServiceException, URISyntaxException{
if (claims == null) {
throw new ServiceException(ErrorCode.ACCESS_DENIED, "Cannot authenticate without valid claims");
}
RcOfficeMainAndExtensionNumber rcOfficeMainAndExtensionNumber = new RcOfficeMainAndExtensionNumber();
Boolean isSSOLogin = claims.get(JwtUtils.ClaimKeys.IS_SSO_LOGIN, Boolean.class);
if(isSSOLogin != null && isSSOLogin) {
String rcAccountId = claims.get(JwtUtils.ClaimKeys.RING_CENTRAL_ACCOUNT_ID, String.class);
String rcExtensionId = String.valueOf(claims.get(JwtUtils.ClaimKeys.RING_CENTRAL_USER_ID, Long.class));
Map<String, String> customRequestHeaders = new HashMap<>();
customRequestHeaders.put(RC_ACCOUNT_ID, rcAccountId);
customRequestHeaders.put(RC_EXTENSION_ID, rcExtensionId);
Map<String, String> pathVariablesForAccountInfoRequest = new HashMap<>();
pathVariablesForAccountInfoRequest.put(RC_ACCOUNT_ID, rcAccountId);
RcAccountInfo rcAccountInfo = rcApiClient.get(
RC_OFFICE_ACCOUNT_INFO_API_PATH,
pathVariablesForAccountInfoRequest,
customRequestHeaders,
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcAccountInfo.class
);
Map<String, String> pathVariablesForExtensionInfoRequest = new HashMap<>();
pathVariablesForExtensionInfoRequest.put(RC_ACCOUNT_ID, rcAccountId);
pathVariablesForExtensionInfoRequest.put(RC_EXTENSION_ID, rcExtensionId);
RcExtensionInfo rcExtensionInfo = rcApiClient.get(
RC_OFFICE_EXTENSION_INFO_API_PATH,
pathVariablesForExtensionInfoRequest,
customRequestHeaders,
RcApplicationHeadersService.RcApplicationType.OFFICE_INTEGRATION,
RcExtensionInfo.class
);
rcExtensionInfo.getExtensionNumber();
rcOfficeMainAndExtensionNumber.setMainNumber(rcAccountInfo.getMainNumber());
rcOfficeMainAndExtensionNumber.setExtensionNumber(rcExtensionInfo.getExtensionNumber());
}
return rcOfficeMainAndExtensionNumber;
}