2010-02-19 2 views
4

Что было бы правильным способом модульного тестирования действия контроллера, выполняющего перенаправление?Как перенаправить тестовые перенаправления в cfwheels

ОБНОВЛЕНИЕ: Я являюсь основным разработчиком проекта CFWheels. Вся причина, по которой я задаю этот вопрос, в настоящее время я работаю над улучшением встроенной структуры тестирования, которой мы располагаем, и мне интересно, как подходить и реализовывать что-то подобное в CFWheels, чтобы разработчикам было проще протестировать их приложение ,

ОБНОВЛЕНИЕ: Я понял, как проверить это. кажется, что нам придется переписать внутренние части контроллера колес немного, чтобы выполнить перенаправление после завершения действия и после того, как он будет передан обратно диспетчеру. единственное, с этим подходом заключается в том, что любой код после redirectTo() будет запускаться EXCEPT, если вы предпримете соответствующие меры предосторожности перед началом работы; это включает в себя либо сдачу возврата после инструкции redirectTo(), либо установку условных проверок в вашем действии для выделения кода redirectTo() из другого кода. Это также означает, что после выполнения redirectTo() ничего не отображается.

+0

Обычно я просто тестирую модель, а не контроллер. Какую структуру MVC вы используете? – Henry

+0

@henry, я обновил вопрос, чтобы ответить на ваш вопрос: P – rip747

+0

Возможно, вы захотите изменить заголовок этого вопроса на «Как перенаправить тестовые перенаправления» или «Как перенаправить тестовые перенаправления в cfwheels». Эти фразы с большей вероятностью соответствуют поисковому запросу пользователя в поисковой системе, что означает, что эта страница будет иметь больше шансов оказаться в качестве верхнего результата. Это будет означать больше репутации для вас и меньше поиска людей с тем же вопросом. –

ответ

2

Это может быть намного проще проверить, если вы разложите механизм перенаправления на несколько функций: a) функция, определяющая целевой URL, и b) функция, выполняющая перенаправление.

Таким образом, вы можете легко протестировать функцию А, а функция А - это тот, который вы хотите протестировать в любом случае. Это код вы писали. Это ваша настоящая логика. FunctionB не является вашим кодом; это ColdFusion кишки, и нет смысла испытывать CFLocation.

Если вы выполняете миссию по достижению 100% -ного охвата тестирования, то вы можете провести 10 тестов для функцииA, где вы выполняете все разные ветви своей логики, а затем один тест для функции B, который осуществляет перенаправление способом что предлагает Терри; таким образом, вы получите только 1 медленный тест вместо 10.

Вы можете обобщить этот подход для использования в других сценариях: файловые системы, веб-службы, http, ftp, электронную почту и т. д. «Извлеките материал, который вы можете контролировать и хочу протестировать материал, который вы не можете контролировать и не хотите тестировать »

2

Вы можете вызвать контроллер с соответствующим URL-адресом, используя cfhttp с перенаправлением, установленным в false. Затем проверьте полученную структуру результата cfhttp, она должна иметь информацию о том, куда будет перенаправляться перенаправление.

+0

Единственная проблема, с которой я вижу, заключается в том, что тест может работать очень медленно. было бы лучше, если бы мне не пришлось выдавать HTTP-запрос. один из подходов, о которых я думал, - это использовать переменную приложения с redirectTo() для возврата аргументов struct во время тестирования и обхода cflocation. моя единственная проблема - это то, что произойдет, если будет другая логика после redirectTo(), которая могла бы работать. – rip747

+1

Я бы сказал, что если ваш контроллер делает переадресацию, которая занимает слишком много времени для модульного теста, что-то нарушается, если я неправильно понимаю, что вы делаете. В этом случае установите тайм-аут на cfhttp и провалитесь, если он занимает слишком много времени. –