Можно ли пометить тест как «ожидаемый сбой» с помощью PHPUnit? Это было бы полезно при выполнении TDD, и вы хотите различать действительно неудачные тесты и тесты, которые не выполняются, потому что связанный код еще не написан.
Я думаю, что в этих случаях довольно просто отметить тест как пропущенный. Ваши тесты все равно будут выполняться, и пакет будет проходить, но тестовый бегун предупредит вас о пропущенных тестах.
http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html
«Правильный» способ обращения с этим – использовать $this->markTestIncomplete()
. Это будет означать, что тест является неполным. Он вернется, как переданный, но отобразит сообщение. См. http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html для получения дополнительной информации.
Я действительно думаю, что это плохая практика, однако вы можете обмануть 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'); }
Если вы хотите, чтобы тест был неудачным, но знаете, что его отказ ожидался, вы можете добавить сообщение к утверждению, которое будет выводиться в результатах:
public function testExpectedToFail() { $this->assertTrue(FALSE, 'I knew this would happen!'); }
В результатах:
There was 1 failure: 1) testExpectedToFail(ClassTest) I knew this would happen!
Комментарий на шестьдесят девять выше почти идеально подходит для того, что я искал.
Метод fail () полезен, когда вы устанавливаете тест для ожидаемого исключения и не вызываете исключение, которое вы хотите, чтобы тест завершился с ошибкой.
$this->object->triggerException(); $this->fail('The above statement was expected to trigger and exception.');
Конечно, triggerException заменяется чем-то в вашем объекте.