2009-04-12 1 views
4

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

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

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

+0

Я еще не зашел так далеко. Я все еще документирую вещь, которая займет некоторое время. Затем, по очереди, у меня есть сводка по очистке кода. Наверное, я начну тестировать только после всего этого. Реально говоря, это означает несколько месяцев, к сожалению:/ –

ответ

4

SimpleTest-х Web Tester может вам помочь.

+0

Я нахожу, что Simpletest web/form tester проще, чем инструменты PHPunit для этого.У меня на самом деле были оба главных автора, бок о бок и спросили, могут ли они интегрировать WT ST в PHPUnit. Здесь надеемся. –

+0

Или, когда вам нужно также протестировать JavaScript на своих страницах и провести несколько кроссбраузерных тестов, вы можете взглянуть на Selenium. –

+0

Странно. Я почти уверен, что наткнулся на SimpleTest раньше, но у меня не сложилось впечатление, что это связано с этим. Это очень может быть то, что мне нужно. Спасибо за ссылку, это требует более детального изучения. Отстаивайте «принятый ответ». –

0

Так это звучит, как будто вы пишете интеграционные тесты, а не юнит-тестов (по определению ничего, что затрагивает окружающую среду является интеграционный тест).

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

2

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

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

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

+0

Окружение непросто полностью представить. Кроме того, если я вручную генерирую стимулы, я бы предпочел не рискнуть создавать неправильные вещи (т. Е. Неправильно форматировать материал.) –

+0

Но, если вы хотите назвать это интеграционными тестами (я не на 100% ясность в отношении нюансов между тестом и тестом. Я просто хочу убедиться, что все работает так, как предполагалось). Все в порядке. Но я заинтересован в том, «как», а не столько «что». –

1

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

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

0

(да, я знаю, плохая форма).

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

+0

Я думал об этом (Zend Framework, похоже, делает это). Но разве не существует точки возможного отказа между прокси-объектом и его сигналами для реальной среды? Мне все равно нужно проверить это, не так ли? –

+0

Обычно вы не можете протестировать эти адаптеры с помощью модульных тестов; Для этого вам придется полагаться на интеграционные тесты (webtest). Но вы хотите протестировать эти вещи отдельно друг от друга, а не просто запускать все через веб-тесты. Единичный тест намного точнее и позволяет насмехаться. – troelskn

+0

Зачем начинать с такого ругательства, когда он уже знает и пытается очистить свой поступок. Это только обескураживает и делает людей близкими. – b01