Я планирую писать модульные тесты для REST-ful API, и мне интересно, какой подход я должен предпринять.
Аспект, который касается меня больше всего, связан с состоянием базы данных. Я понимаю, что среда или исходное состояние тестовой цели должны быть одинаковыми для каждого теста, а это значит, что база данных также должна быть одинаковой для каждого теста. Как достичь этого, когда у меня есть тяжелая база данных? Кроме того, как мне обрабатывать возможные изменения в схеме базы данных?
Вопрос в том, что вы хотите проверить. Как вы думаете, что произойдет с верхним api-слоем (т.е. уровнем, который получает HTTP-запрос)?
Обычно запись unit-test restful-api звучит как оксюморон;) По определению модульные тесты намного меньше, чем использование HTTP-входа в базу данных. Звучит больше, потому что ваш вопрос основан на том, как писать большие тесты (или прием, сквозной тест).
Помните, что реализация таких крупных тестов (сквозной тест) требует больших усилий:
По моему опыту разнообразие тестовой гранулярности является королем, поэтому я смешиваю / комбинирую подходы:
Может быть, вы можете дать больше информации о конкретном случае использования, который хотите протестировать, так что может помочь?
Обычно в модульных тестах вы пытаетесь удалить все зависимости за пределами объекта (обычно это функция / класс / объект), который вы тестируете. Классический способ выполнить это в вашем случае (для баз данных) – это использование mocks. http://en.wikipedia.org/wiki/Mock_object
В принципе, вы реализуете «FakeDatabase», которая использует API фактической базы данных, которая возвращает известные значения.