Я работаю с приложением QML, которое взаимодействует с удаленным REST API через HTTPS. «Клиентская» часть приложения аккуратно упакована в компонент, и я хотел бы выполнить это модульное тестирование, но я не хочу полагаться на то, что удаленная служба доступна, когда я запускаю тесты, и при этом я не хочу совершать реальные транзакции. Вместо этого я хочу издеваться над удаленным сервисом.
Какой хороший способ сделать это? Я занимаюсь разработкой Ubuntu Trusty, использую Ubuntu SDK 1.119.
Если вся логика для того, чтобы говорить с удаленным API и парсинга результатов, находится в C++ как плагин компонента, можно использовать библиотека googlemock , упакованная как google-mock
в Ubuntu, для создания модульных тестов, которые дразнят ожидаемые результаты и данные. Однако, если бы API на изменениях сервера, Ваш код может все еще перестать работать, даже при том, что тесты передали бы, поскольку Вы только тестируете некоторые известные ожидаемые результаты.
Другая опция состоит в том, чтобы представить переменную среды в y наш код, так, чтобы можно было указать на базовый URL на различное местоположение, такой как localhost:12345, и реализовать ложный сервер HTTP в Python или другом языке, на котором работают случайный высокий порт, на который можно указать на тесты. Это делает запущение тестов немного более сложным, поскольку необходимо получить случайный порт из сценария сервера и передать его на тесты в некотором роде. Можно запустить этот тест на плоскости HTTP или создать сертификат CA и сертификат сервера, которые включены в набор тестов и добавляют некоторый способ гарантировать, что сетевая библиотека может загрузить CA в цепочку сертификата для проверки локального Подключения HTTPS. Однако это все очень сложно и не дает Вам больше полезные результаты, чем более простые модульные тесты с поддельными данными.
Кроме того, можно только говорить с фактическим сервером с фактическим действительным сертификатом. Идеально, удаленный сервис будет, обеспечивая подготовку/тестовый сервер для того, чтобы сделать такое тестирование против, и можно представить переменную среды или подобный в коде, для указания на него на подготовку/тестовый сервер, вместо живого сервера.