Юнит-тестирование HTTP-действий - PullRequest
4 голосов
/ 12 апреля 2009

Я пишу еще один PHP Framework, и теперь, когда я написал много разных вещей, я начинаю думать о модульных тестах (да, я знаю, плохая форма).

Некоторые действия заставляют платформу изменять поведение HTTP, например создавать куки, перенаправлять браузер. Еще одной важной особенностью является то, что посещенный URI может влиять на поведение платформы.

Короче говоря, мне нужно иметь возможность тестировать вещи, которые влияют или влияют на среду, а не только на возвращаемые значения функций / методов. Как я могу сделать это проще всего?

Ответы [ 5 ]

4 голосов
/ 12 апреля 2009

SimpleTest's Web Tester может помочь вам.

2 голосов
/ 12 апреля 2009

Короче говоря, мне нужно иметь возможность тестировать вещи, которые влияют или влияют на среду, а не только на возвращаемые значения функций / методов. Как я могу сделать это проще всего?

Если среда может быть легко смоделирована и может быть полностью представлена ​​с небольшим количеством состояний, тогда вам следует изучить фиктивное тестирование . Ложные тесты помогут вам писать тесты без лишних сложностей, связанных с использованием реальных доменных объектов, если вы можете избежать необходимости просто проверять, чтобы все вызывалось в правильном порядке. Вот хороший обзор принципов.

Если это не так, то вы говорите о интеграционном тесте , который значительно дороже. Интеграционные тесты помогают определить, правильно ли сформирована ваша система и, как правило, она работает с полной копией вашего приложения. Вот еще немного чтения по интеграционным тестам.

1 голос
/ 12 апреля 2009

Вы должны отправлять HTTP-запросы к серверу в своих модульных тестах, а затем проверять правильность установки файлов cookie и заголовков в ответе.

В PHP я бы использовал Zend_Http_Client. Документацию можно найти здесь , в пакете Zend_Http.

0 голосов
/ 12 апреля 2009

(да, я знаю, дурной тон).

Да. Если бы вы начали с тестов, вы бы написали свой фреймворк таким образом, чтобы можно было исключить внешние зависимости. Теперь вы можете заменить все вызовы функций, которые манипулируют глобальным состоянием, вызовом глобального прокси-объекта. Затем вы можете сделать это во время тестов. Одна из проблемных изменений глобального состояния - это вызовы exit / die. Вы могли бы попытаться заменить это исключением в своем макете.

0 голосов
/ 12 апреля 2009

Похоже, что вы пишете интеграционные тесты, а не модульные тесты (по определению все, что касается среды, является интеграционным тестом).

Было бы проще протестировать через стек через браузер? Если это так, взгляните на каркас автоматизации браузера, может быть что-то вроде http://wtr.rubyforge.org/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...