Я бы настоятельно советовал вам издеваться над сервером.Серверы выключаются, поведение меняется, и если тест ошибка подразумевает «возможно, мой код все еще работает», у вас есть проблема, потому что ваш тест не говорит вам, является ли кодсломан, что составляет вся точка .
Что касается того, как смоделировать сервер, для модульного теста, который делает это:
first_results = list_things()
delete_first_thing()
results_after_delete = list_thing()
У меня есть ложные данныеструктура, которая выглядит следующим образом:
{ list_things_request : [first_results, results_after_delete],
delete_thing_request: [delete_thing_response] }
Она основана на вашем запросе, а значение представляет собой массив ответов на этот запрос в порядке их просмотра.Таким образом, вы можете поддерживать многократный запуск одного и того же запроса (например, перечисление вещей) и получение другого результата.Я использую этот формат, потому что в моей ситуации мои API-вызовы могут выполняться в несколько ином порядке, чем в прошлый раз.Если ваши тесты проще, вы можете обойтись простым списком пар запрос / ответ.
У меня есть флаг в моих модульных тестах, который указывает, нахожусь ли я в режиме «записи» (то естьразговариваю с реальным сервером и записываю эту структуру данных на диск) или, если я нахожусь в режиме «воспроизведения» (разговариваю со структурой данных).Когда мне нужно работать с тестом, я «записываю» взаимодействия с сервером и затем воспроизводю их.
Я использую малоизвестный SenTestCaseDidStartNotification, чтобы отследить, какой модульный тест запущен, и соответствующим образом изолировать мои файлы данных..
Еще одна вещь, которую нужно иметь в виду, заключается в том, что нестабильность является корнем всего зла.Если у вас есть код, который работает с наборами или получает текущую дату и т. Д., Это приводит к изменению запросов и ответов, которые не работают в автономном сценарии.Так что будь осторожен с ними.