Как указать, что ожидается, что тест PHPUnit завершится неудачей?
Можно ли пометить тест как "ожидаемый сбой" с помощью PHPUnit? Это было бы полезно при выполнении TDD, и вы хотите различать действительно неудачные тесты и тесты, которые не выполняются, потому что связанный код еще не написан.
Ответы
Ответ 1
Я думаю, что в этих случаях он достаточно стандартный, чтобы просто пометить тест как пропущенный. Ваши тесты все равно будут выполняться, и пакет будет проходить, но тестовый бегун предупредит вас о пропущенных тестах.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
Ответ 2
"Правильный" способ обращения с этим - использовать $this->markTestIncomplete()
. Это будет означать, что тест является неполным. Он вернется, как переданный, но отобразит сообщение. Подробнее см. http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html.
Ответ 3
Я действительно считаю это плохой практикой, однако вы можете обмануть PHPUnit таким образом:
/**
* This test will succeed !!!
* @expectedException PHPUnit_Framework_ExpectationFailedException
*/
public function testSucceed()
{
$this->assertTrue(false);
}
Более чисто:
public function testFailingTest() {
try {
$this->assertTrue(false);
} catch (PHPUnit_Framework_ExpectationFailedException $ex) {
// As expected the assertion failed, silently return
return;
}
// The assertion did not fail, make the test fail
$this->fail('This test did not fail as expected');
}
Ответ 4
Если вы хотите, чтобы тест был неудачным, но знаете, что его отказ ожидался, вы можете добавить сообщение к утверждению, которое будет выводиться в результаты:
public function testExpectedToFail()
{
$this->assertTrue(FALSE, 'I knew this would happen!');
}
В результатах:
There was 1 failure:
1) testExpectedToFail(ClassTest)
I knew this would happen!
Ответ 5
Комментарий на шестьдесят девять выше почти идеально подходит для того, что я искал.
Метод fail() полезен, когда вы устанавливаете тест для ожидаемого исключения и если он не инициирует исключение, которое вы хотите, чтобы тест завершился с ошибкой.
$this->object->triggerException();
$this->fail('The above statement was expected to trigger and exception.');
Конечно, triggerException заменяется чем-то в вашем объекте.
Ответ 6
В PHPUnit 8.2.5 вы можете просто ожидать исключения брошенного утверждения:
$this->expectException('PHPUnit\Framework\ExpectationFailedException');
$this->assertTrue(false);