Как указать, что тест PHPUnit, как ожидается, провалится? - PullRequest
17 голосов
/ 12 октября 2010

Можно ли пометить тест как "ожидаемый сбой" с помощью PHPUnit? Это было бы полезно при выполнении TDD, и вы хотите различать действительно неудачные тесты и тесты, которые оказываются неудачными, потому что соответствующий код еще не написан.

Ответы [ 5 ]

24 голосов
/ 12 октября 2010

Я думаю, что в этих случаях достаточно просто пометить тест как пропущенный.Ваши тесты все еще будут выполняться, и набор будет пройден, но тестовый исполнитель предупредит вас о пропущенных тестах.

http://phpunit.de/manual/current/en/incomplete-and-skipped-tests.html

11 голосов
/ 22 сентября 2012

«Правильный» метод обработки это использование $this->markTestIncomplete().Это пометит тест как незавершенный.Он вернется как пройденный, но отобразит предоставленное сообщение.См. http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html для получения дополнительной информации.

9 голосов
/ 03 марта 2011

Я действительно считаю, что это плохая практика, однако вы можете обмануть 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');  
  }
1 голос
/ 30 августа 2013

Комментарий шестидесяти девяти выше почти идеален для того, что я искал.

Метод fail () полезен, когда вы устанавливаете тест для ожидаемого исключения и если он не вызвал исключение, вы хотите, чтобы тест не прошел.

$this->object->triggerException();
$this->fail('The above statement was expected to trigger and exception.');

Конечно, триггерное исключение заменено чем-то в вашем объекте.

1 голос
/ 12 октября 2010

Если вы хотите, чтобы тест не прошел, но знаете, что его ожидание было ожидаемым, вы можете добавить сообщение к утверждению , которое выдаст результаты:

public function testExpectedToFail()
{    
    $this->assertTrue(FALSE, 'I knew this would happen!');
}

В результатах:

There was 1 failure:

1) testExpectedToFail(ClassTest)
I knew this would happen!
...