решение meouw корректно, но если Вы, интересуются большим количеством управления тогда, Вы могли бы попробовать плагин менеджера по Ajax для jQuery.
Невозможно сделать это в рамках одного модульного теста. Это возможно, если вы разделите тестирование возвращаемого значения и уведомления на два разных теста.
Обработчик ошибок PHPUnit улавливает ошибки PHP, замечает и преобразует их в исключения, которые по определению останавливают выполнение программы. Функция, которую вы тестируете, вообще никогда не возвращается. Однако вы можете временно отключить преобразование ошибок в исключения даже во время выполнения.
Это, вероятно, проще с примером, поэтому вот как должны выглядеть два теста:
public function testLoadFileTriggersErrorWhenFileNotFound()
{
$this->setExpectedException('PHPUnit_Framework_Error_Warning'); // Or whichever exception it is
$result = load_file('/some/non-existent/file');
}
public function testLoadFileRetunsFalseWhenFileNotFound()
{
PHPUnit_Framework_Error_Warning::$enabled = FALSE;
$result = load_file('/some/non-existent/file');
$this->assertFalse($result);
}
Это также имеет дополнительный бонус в виде сделать ваши тесты более ясными, понятными и самодокументированными.
Re: Комментарий: Это отличный вопрос, и я понятия не имел, пока не провёл пару тестов. Похоже, что он не восстановит значение по умолчанию / исходное значение, по крайней мере, с PHPUnit 3.3.17 (текущая стабильная версия прямо сейчас).
Итак, я бы фактически изменил приведенное выше, чтобы посмотреть вот так:
public function testLoadFileRetunsFalseWhenFileNotFound()
{
$warningEnabledOrig = PHPUnit_Framework_Error_Warning::$enabled;
PHPUnit_Framework_Error_Warning::$enabled = false;
$result = load_file('/some/non-existent/file');
$this->assertFalse($result);
PHPUnit_Framework_Error_Warning::$enabled = $warningEnabledOrig;
}
Re: Второй комментарий:
Это не совсем так. Я смотрю на обработчик ошибок PHPUnit, и он работает следующим образом:
E_WARNING
, используйте PHPUnit_Framework_Error_Warning
в качестве класса исключения. E_NOTICE
или E_STRICT
ошибка, используйте PHPUnit_Framework_Error_Notice
PHPUnit_Framework_Error
в качестве класса исключения. Итак, да, ошибки E_USER _ *
не превращаются в PHPUnit ' s * _Warning или * _Notice, они по-прежнему преобразуются в общее исключение PHPUnit_Framework_Error
.
Дальнейшие мысли
Хотя это зависит именно от того, как используется функция, я бы, вероятно, переключился на генерацию фактического исключения вместо запуска ошибки, если бы это был я. Да, это изменило бы логику метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли запрашиваемый файл не существует исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и использовать в потоке вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д.
они по-прежнему преобразуются в общее исключение PHPUnit_Framework_Error
.
Дальнейшие мысли
Хотя это зависит именно от того, как используется функция, я бы, вероятно, переключился на генерацию фактического исключения вместо того, чтобы вызывать ошибку, если бы это был я. Да, это изменило бы логику метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли запрашиваемый файл не существует исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и работать с потоком вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д.
они по-прежнему преобразуются в общее исключение PHPUnit_Framework_Error
.
Дальнейшие мысли
Хотя это зависит именно от того, как используется функция, я бы, вероятно, переключился на генерацию фактического исключения вместо запуска ошибки, если бы это был я. Да, это изменило бы логический поток метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли несуществующий запрашиваемый файл является исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и работать с потоком вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д.
Дальнейшие мысли
Хотя это зависит именно от того, как используется функция, я бы, вероятно, переключился на генерацию фактического исключения вместо запуска ошибки, если бы это был я. Да, это изменило бы логический поток метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли несуществующий запрашиваемый файл является исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и использовать в потоке вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д.
Дальнейшие мысли
Хотя это зависит именно от того, как используется функция, я бы, вероятно, переключился на генерацию фактического исключения вместо того, чтобы вызывать ошибку, если бы это был я. Да, это изменило бы логику метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли запрашиваемый файл не существует исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и использовать в потоке вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д.
если бы это был я. Да, это изменило бы логику метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли запрашиваемый файл не существует исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и использовать в потоке вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д. если бы это был я. Да, это изменило бы логический поток метода и код, который использует метод ... прямо сейчас выполнение не останавливается, когда он не может прочитать файл. Но вам решать, действительно ли запрашиваемый файл не существует исключительным поведением. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и использовать в потоке вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и работать с потоком вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д. Я предпочитаю использовать исключения больше, чем ошибки / предупреждения / уведомления, потому что их легче обрабатывать, тестировать и работать с потоком вашего приложения. Я обычно оставляю уведомления для таких вещей, как вызов устаревших методов и т. Д. Вместо того, чтобы ожидать общего « Exception
», как насчет ожидания « PHPUnit_Framework_Error
»?
Что-то вроде этого могло бы сделать:
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testFailingInclude()
{
include 'not_existing_file.php';
}
Что, я полагаю, можно также записать как:
public function testLoadFile ()
{
$this->setExpectedException('PHPUnit_Framework_Error');
$result = load_file('/some/non-existent/file');
// code after this point never gets executed
$this->assertFalse($result);
}
Для получения дополнительной информации см. Тестирование ошибок PHP
В частности, там написано (цитируется):
PHPUnit_Framework_Error_Notice
иPHPUnit_Framework_Error_Warning
представляют Уведомления и предупреждения PHP соответственно.
Глядя на файл /usr/share/php/PHPUnit/TextUI/TestRunner.php, который у меня есть в моей системе, я вижу этот (строка 198 и последующие) :
if (!$arguments['convertNoticesToExceptions']) {
PHPUnit_Framework_Error_Notice::$enabled = FALSE;
}
if (!$arguments['convertWarningsToExceptions']) {
PHPUnit_Framework_Error_Warning::$enabled = FALSE;
}
Так что, возможно, вы ' нужно будет передать какой-то параметр, чтобы активировать это поведение? Но вроде по умолчанию включен ...
Используйте файл конфигурации phpunit.xml
и отключите преобразование уведомления / предупреждения / ошибки в исключение. Подробнее о читайте в инструкции . В основном это примерно так:
<phpunit convertErrorsToExceptions="false"
convertNoticesToExceptions="false"
convertWarningsToExceptions="false">
</phpunit>