У меня есть веб-сервер Spring, который по запросу делает внешний вызов некоторого стороннего веб-API (например, retreive Facebook oauth token). После получения данных от этого вызова он вычисляет ответ:
@RestController
public class HelloController {
@RequestMapping("/hello_to_facebook")
public String hello_to_facebook() {
// Ask facebook about something
HttpGet httpget = new HttpGet(buildURI("https", "graph.facebook.com", "/oauth/access_token"));
String response = httpClient.execute(httpget).getEntity().toString();
// .. Do something with a response
return response;
}
}
Я пишу интеграционный тест, который проверяет, что удаленный url на моем сервере приводит к некоторому ожидаемому результату. Однако я хочу издеваться над внешним сервером локально, так что мне даже не нужен интернет-доступ, чтобы проверить все это. Каков наилучший способ сделать это?
Я новичок в spring, это то, что я до сих пор.
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
@IntegrationTest({})
public class TestHelloControllerIT {
@Test
public void getHelloToFacebook() throws Exception {
String url = new URL("http://localhost:8080/hello_to_facebook").toString();
//Somehow setup facebook server mock ...
//FaceBookServerMock facebookMock = ...
RestTemplate template = new TestRestTemplate();
ResponseEntity<String> response = template.getForEntity(url, String.class);
assertThat(response.getBody(), equalTo("..."));
//Assert that facebook mock got called
//facebookMock.verify();
}
}
Фактическая реальная настройка сложнее - я делаю логин для входа в систему o o ot, и вся эта логика находится не в контроллере, а в различных объектах безопасности Spring. Однако я подозреваю, что код тестирования должен быть таким же, поскольку я просто нажимаю URL-адреса и ожидаю ответа, не так ли?