Я собираюсь отправиться в путешествие по написанию библиотеки java для переноса веб-API, и я бы хотел написать тесты на этом пути, чтобы убедиться, что все персиковый. Я использую JUnit довольно долгое время, и мне очень удобно использовать его вместе с такими инструментами, как PowerMockito/Mockito. Однако я обеспокоен тем, что тесты могут завершиться неудачно, если API не работает, или я не могу его достичь, поскольку в конечном итоге планирую запустить его на сервере CI (travis-ci) и хотел бы, чтобы процедура сборки-тестирования-развертывания была такой же насколько это возможно.Как безопасно протестировать код, требующий внешнего веб-интерфейса API
Я сделал довольно много работы в Google, и большинство вопросов, которые я нашел здесь, к сожалению, касаются тестирования API, который программист создал или может настроить локально. Я понимаю, что можно воспроизвести базовую функциональность API с небольшим мастерингом, хотя это больше похоже на шаг назад, чем на передний план.
В настоящее время я разрабатываю идеи в своей голове, и до сих пор это похоже на умеренно надежное решение, хотя было бы неплохо, если бы кто-нибудь смог проверить это или предложить лучший.
TestUtil.java
public static boolean isReachable() {
try (Socket socket = new Socket("api.host.com", 80)) {
return true;
} catch (Exception e) {
return false;
}
}
TestCase.java
@BeforeClass
public static void testReachable() {
Assume.assumeTrue("API was not reachable, test cannot run", TestUtil.isReachable());
}
Я принимаю его с @BeforeClass
просто из паранойи.
Однако это не связано с ошибками HTTP, только проверка того, что что-то прослушивает порт 80. Стоит ли заменять запрос HEAD
? Кроме проверки ошибок, я честно не уверен. Я не хочу использовать HTTP без подтверждения, это лучший способ, поскольку эта библиотека может стать довольно большой.
Edit: Я просто наткнулся на InetAddress#isReachable()
, хотя согласно статье я читал это не самый надежный.
В зависимости от размера API и того, что вы намерены делать с ним, код (как вы сказали сами) может стать довольно большим. Прежде чем отправиться в путешествие, возможно, вы могли бы оценить то, что уже существует, чтобы сделать это, например, RetroFit. –
Также стоит упомянуть, что RetroFit по характеру того, что он говорит, с внешними API. Он также имеет тесты и является открытым исходным кодом. Вы можете посмотреть их тесты на вдохновение. –
Ох, это тоже квадрат, это блестяще - Спасибо. –