Я сейчас пишу интеграционный тест для приложения SpringBoot.Его функциональность - получать / отправлять запросы извне и пересылать / получать их в другое приложение (APP_2).Таким образом, существует две системы, которые необходимо смоделировать вне системы и APP_2.
HomeController
@Controller
public class HomeController {
@Autowired
ForwardController forwardController;
@RequestMapping("/")
public @ResponseBody
String greeting() {
return forwardController.processGET().toString();
}
}
ForwardController
@Service
public class ForwardController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private Environment environment;
private ResponseEntity sendRequest(String url, HttpMethod method, HttpEntity requestEntity, Class responseType, Object... uriVariables) {
return restTemplate.exchange( url, method, requestEntity, responseType,uriVariables);
}
public ResponseEntity processGET()
{
HttpHeaders headers = new HttpHeaders();
headers.set("Accept", MediaType.APPLICATION_JSON_VALUE);
HttpEntity<?> entity = new HttpEntity<>(headers);
String app_2_url = environment.getProperty(Constants.APP_2_URL);
ResponseEntity<String> response = sendRequest(app_2_url,HttpMethod.GET,entity,String.class);
return response;
}
}
APP_2_CONTROLLER
@Controller
public class App_2_Controller {
@RequestMapping("/app2Stub")
public @ResponseBody
String greeting() {
return "Hello End of world";
}
}
Тестовый класс, который имитирует поведение внешнего запроса к системе:
HTTP_request_Test
@RunWith(SpringRunner.class)
@ActiveProfiles("test")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,classes = Application.class)
public class HttpRequestTest {
@LocalServerPort
private int port;
@Autowired
private TestRestTemplate restTemplate;
@Autowired
private Environment environment;
@Test
public void greetingShouldReturnDefaultMessage() throws Exception {
assertThat(this.restTemplate.getForObject("http://localhost:" + port + "/",
String.class)).contains("Hello End of world");
}
}
Здесь, в этом тестовом классе, я переопределяю свойства, имея два файла свойств.Поэтому, когда мы запустим тест, запрос будет отправлен в App_2_Controller (Mock in my project), а не в настоящее приложение.
ВОПРОС :
- Есть ли способ поместить APP_2_CONTROLLER в тестовую папку?Это связано с тем, что я не хочу показывать нежелательную конечную точку теста в моем приложении Actual.
- Здесь, в приведенном выше проекте, я изменяю URL со свойствами.Есть ли лучший способ поставить контроллер для того же URL.Для простоты предположим, что app_2 url равен app.com: 9000 / serve