How to indicate that a PHPUnit test is expected to fail?

I think in these cases, it's fairly standard to simply mark the test as skipped. Your tests will still run and the suite will pass, but the test runner will alert you of the skipped tests.

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


I really think it's a bad practice, however you can trick PHPUnit this way:

/**
 * This test will succeed !!!
 * @expectedException PHPUnit_Framework_ExpectationFailedException
 */
public function testSucceed()
{
    $this->assertTrue(false);
}

More cleanly:

  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');  
  }

The 'correct' method of handling this is to use $this->markTestIncomplete(). This will mark the test as incomplete. It will come back as passed, but it will display the message provided. See http://www.phpunit.de/manual/3.0/en/incomplete-and-skipped-tests.html for more information.