У меня есть веб-сервер Spring, который по запросу делает внешний вызов стороннему веб-API (например, retreive Facebook oauth token). После получения данных из этого вызова вычисляет ответ:Mock внешний сервер во время тестирования интеграции с Spring
@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 на моем сервере приводит к некоторому ожидаемому результату. Однако я хочу издеваться над внешним сервером локально, так что мне даже не нужен интернет-доступ, чтобы проверить все это. Каков наилучший способ сделать это?
Я новичок весной, это то, что у меня есть до сих пор.
@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();
}
}
Фактические реальная создана более сложный - я делаю Facebook OAuth логин и все, что логика не в контроллере, но в различных объектах Spring Security. Однако я подозреваю, что код тестирования должен быть таким же, поскольку я просто нажимаю URL-адреса и ожидаю ответа, не так ли?
Я пришел с этим кодом, чтобы понять, как написать более сложный интеграционный тест. Фактическая система, которую я хочу протестировать, а затем рефакторинг, состоит из нескольких модулей безопасности Spring, которые работают, чтобы обеспечить oauth2 с помощью facebook. Все это делается с защищенной архитектурой REST без состояния, которая имеет свои собственные причуды. В конечном счете, я хочу протестировать эту сложную систему - есть несколько шагов перед вызовом facebook и несколько после. Этот вопрос с контроллером - это самый простой явный первый шаг, о котором я могу сейчас думать, и опубликовать всю систему, чтобы полностью ответить на него невозможно. – otognan
Можно ли сказать, что вы хотите частично проверить поведение своего приложения, когда весенняя безопасность имеет ошибки аутентификации? –
У меня уже есть рабочий прототип, но его уродливый. У меня нет давления на этот проект, поэтому я хочу написать несколько тестов, которые обеспечат хорошую работу системы, в то время как я буду делать большой рефакторинг. Так что да, частично я хочу протестировать проверку подлинности и другие режимы отказа, но в основном я хочу быть уверенным, что я сохраняю работоспособность во время рефакторинга. – otognan