2015-03-04 2 views
3

мы строим API с помощью Laravel, и мы сталкиваемся с существенным вопросом:API модульного тестирования (Test Endpoints против Test Everything)

Должны ли мы проверить все (каждый метод в каждой модели, контроллер и любой другой класс)? или просто проверить конечные точки API, так как тестирование конечных точек означает, что все остальное будет проверено, потому что конечная точка API использует метод контроллера, который, в свою очередь, использует метод модели!

Фактически я склоняюсь к более позднему, который тестирует конечные точки, поможет вам проверить все остальное, но я должен быть уверен, что это правильная вещь.

Edit:

Рассмотрим следующие два момента:

  • тестирования конечных точек означает, что я должен послать запрос HTTP и ждать ответа, чтобы увидеть, если это то, что мне нужно, и это может быть очень плохо для этого метода.
  • тестирование все означает, что я должен найти способ подделать запрос laravel и его заголовки, и это может быть очень плохо для этого метода.

Любые советы и комментарии будут оценены.

ответ

4

Аргументы и сторонники существуют для обеих сторон. Я подозреваю, что на эту тему так много мнений, что разработчики делают какие-либо формы тестирования разработчиков.

В двух словах:

  • Юнит тесты еще большую нагрузку на ваш дизайн. Плохой код будет больнее, если вы будете тестировать на уровне единицы.
  • Модульные тесты позволяют точно определить проблемы, поскольку они проверяют каждую единицу работы в изоляции. Если единичный тест выходит из строя, вы знаете, где искать проблему. Если встроенный тест взрывается, вы знаете, что что-то не так, но обычно приходится начинать отладки, чтобы найти актуальную проблему.

Мне нравится пользователю фраза твиттер @everzet недавно использовавшийся:

Когда они зеленые, все тесты выглядят одинаково. Когда они красные, вы видите .

С другой стороны, интегрированные тесты обеспечивают большую свободу при рефакторинге. Если вы тестируете только на уровне API, вы можете изменить всю реализацию, не влияя на ваши тесты. Если вы протестируете на уровне единицы, рефакторинг может означать, что вам нужно обновить/переписать множество тестов.

+0

, так что вы думаете, что лучше построить оба теста? если да, то как следует тестировать модели в laravel, если они зависят от заголовков запросов, например? –

+1

Все зависит от вашего текущего контекста: проекта, дисциплины/зрелости ваших коллег-разработчиков и т. Д. Если вы спросите меня прямо сейчас, я бы определенно протестировал все на уровне единицы и провел очень мало сквозных тестов чтобы убедиться, что система действительно правильно подключена. Это хорошо сочетается с концепцией [тестовой пирамиды Кона] (http://martinfowler.com/bliki/TestPyramid.html). Факт остается фактом: более высокий уровень ваших тестов, тем более дорогостоящим они становятся для поддержания. – prgmtc

+0

спасибо @prgmtc, вы тоже открыли глаза на что-то другое, возможно, я не могу написать модульный тест, потому что единицы не удовлетворяют принципу единоличной ответственности, я буду принимать ваш ответ: D –

Смежные вопросы