맞춤형 액추에이터 엔드포인트를 단위 테스트하는 방법
17818 단어 testjavaspringbootactuator
필요한 종속성 목록은 다음과 같습니다.
implementation 'junit:junit:4.12'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
exclude group: "com.vaadin.external.google", module:"android-json"
}
testImplementation group: 'com.konghq', name: 'unirest-mocks', version: '3.11.06'
testImplementation group: 'org.powermock', name: 'powermock-module-junit4', version: '2.0.9'
testImplementation group: 'org.powermock', name: 'powermock-api-mockito2', version: '2.0.9'
먼저 JiraConnectorService에서 사용하는 구성 클래스를 로드하는 클래스가 필요합니다.
@TestConfiguration
public class TestConfig {
@Bean
public JiraConfig getJiraConfig(){
return new JiraConfig();
}
}
서비스를 테스트하여 Jira 엔드포인트 응답에 따라 올바른 데이터를 반환하는지 확인하십시오.
그렇게 하려면 Unirest.get() 호출 및 응답을 모의 처리해야 합니다.
@RunWith(PowerMockRunner.class)
@PowerMockRunnerDelegate(SpringRunner.class)
@PrepareForTest(Unirest.class)
@Import({TestConfig.class})
@PowerMockIgnore({"javax.*.*", "com.sun.*", "org.xml.*"})
@SpringBootTest
public class JiraConnectorServiceTest {
@Mock
private GetRequest getRequest;
@Autowired
JiraConnectorService jiraConnectorService;
@Autowired
JiraConfig jiraConfig;
@Test
public void getResponseTimeTest() throws Exception {
JsonNode json = new JsonNode("{\"result\":10}");
HttpResponse<JsonNode> mockResponse = mock(HttpResponse.class);
when(mockResponse.getStatus()).thenReturn(200);
when(mockResponse.getBody()).thenReturn(json);
String mySelfEndPointUrl = jiraConfig.getHost() + jiraConfig.getApiPath() + JiraConnectorService.JIRA_MYSELF_ENDPOINT;
PowerMockito.mockStatic(Unirest.class);
when(Unirest.get(mySelfEndPointUrl)).thenReturn(getRequest);
when(getRequest.header(JiraConnectorService.HEADER_ACCEPT, JiraConnectorService.HEADER_APP_JSON)).thenReturn(getRequest);
when(getRequest.basicAuth(jiraConfig.getUser(), jiraConfig.getPassword())).thenReturn(getRequest);
when(getRequest.asJson()).thenReturn(mockResponse);
ResponseTimeData data = jiraConnectorService.getResponseTime();
Assert.assertEquals(HttpStatus.OK.value(), data.getHttpStatusCode());
Assert.assertTrue(data.getTime() > 0);
}
정적 메서드 Unirest.get(..)을 조롱하려면 PowerMockito 및 @RunWith(PowerMockRunner.class) 주석을 사용해야 합니다.
하나의 @RunWith 주석만 사용할 수 있으므로 @PowerMockRunnerDelegate(SpringRunner.class)를 추가하여 Spring 컨텍스트를 로드합니다.
그런 다음 엔드포인트를 테스트합니다.
@RunWith(SpringRunner.class)
@Import({TestConfig.class})
@AutoConfigureMockMvc
@SpringBootTest
public class RestJiraEndPointTest {
private static final String ACTUATOR_URI = "/management";
@MockBean
private JiraConnectorService jiraConnectorService;
@Autowired
private MockMvc mockMvc;
@Test
public void healthDtl_DOWN() throws Exception {
ResponseTimeData data = new ResponseTimeData();
data.setTime(-1);
data.setHttpStatusCode(HttpStatus.SERVICE_UNAVAILABLE.value());
data.setMessage("Service unavailable");
Mockito.when(jiraConnectorService.getResponseTime()).thenReturn(data);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(ACTUATOR_URI + "/jira/healthDtl")
.accept(MediaType.APPLICATION_JSON);
this.mockMvc.perform(requestBuilder)
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.status").value("DOWN"));
}
@Test
public void healthDtl_UP() throws Exception {
ResponseTimeData data = new ResponseTimeData();
data.setTime(235L);
data.setHttpStatusCode(HttpStatus.OK.value());
data.setMessage("Ok");
Mockito.when(jiraConnectorService.getResponseTime()).thenReturn(data);
RequestBuilder requestBuilder = MockMvcRequestBuilders.get(ACTUATOR_URI + "/jira/healthDtl")
.accept(MediaType.APPLICATION_JSON);
this.mockMvc.perform(requestBuilder)
.andDo(MockMvcResultHandlers.print())
.andExpect(MockMvcResultMatchers.status().isOk())
.andExpect(MockMvcResultMatchers.jsonPath("$.status").value("UP"))
.andExpect(MockMvcResultMatchers.jsonPath("$.responseTimeMs").value("235"));
}
}
먼저 @SpringBootTest 대신 @WebMvcTest(RestJiraEndPoint.class)를 사용하려고 시도했지만 성공하지 못했습니다. Spring은 @RestControllerEndpoint를 나머지 컨트롤러로 인식하지 못하는 것 같습니다. 따라서 @SpringBootTest 및 @AutoConfigureMockMvc를 사용해야 합니다.
Reference
이 문제에 관하여(맞춤형 액추에이터 엔드포인트를 단위 테스트하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/optnc/how-to-unit-test-a-custom-actuator-endpoint-3h4p텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)