PHPUnit и функция die - PullRequest
       4

PHPUnit и функция die

8 голосов
/ 09 мая 2011

Я использую phpunit Framework и у меня есть код, подобный этому:

public function A() {

 try {

   (...some code...)

   die (json_encode ($data));

 }

 catch (Exception $e) {
   die(false);
 }

}

Эта функция вызывается через AJAX, и я не могу заменить die на return. Вопрос в том: Как я могу сделать модульный тест с кодом, подобным этому?

Я не могу использовать это, утверждает.

Спасибо.

Ответы [ 3 ]

17 голосов
/ 09 мая 2011

Вы не можете это проверить ...

Иногда модульное тестирование приводит к таким проблемам (непроверяемые ситуации).Обычно это означает, что проблема не в тестировании, а в вашем коде и его архитектуре.

Здесь вы не должны использовать функцию die (на самом деле вы не должны использовать dieвернуть HTTP-ответ ), но echo json и затем позволить скрипту завершить работу правильно (или return json и echo это где-то еще).

Чтобы проверить это, выможет затем захватить вывод и проверить его (это базовый пример, я думаю, что он намного лучше).

Вывод: проблема в вашем коде, исправьте это, а затем вы можете попробовать протестироватьон .Если не можете, тогда не тестируйте.

3 голосов
/ 09 мая 2011

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

, для этого вам нужно написать тестовый файл, который запускает функцию A. Например.* теперь вызовите этот скрипт с shell_exec.

$return = shell_exec('testscript.php');

переменная возврата содержит выходные данные тестового сценария.

3 голосов
/ 09 мая 2011

Почему нельзя заменить die() на return?

Мое решение было бы сделать это исключение, а затем перехватить исключение с помощью другого метода. Затем вы можете выполнить модульный тест function a(), проверив, что он выдает правильные исключения. Другая функция обрабатывает die().

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