user1578653
user1578653

Reputation: 5028

PHPUnit test passes when it should fail

I am writing a PHPUnit test suite and have run into a bit of a problem.

Here is the test:

public function testSomething(){
  $stub = $this->getMockForAbstractClass('\core\classes\ImportedFile');

  $stub->expects($this->exactly(4))
       ->method('thismethoddoesntexist');

  $this->markTestIncomplete('not finished implementing');
}

For some reason this test is not failing. It should because the method does not exist and is therefore not called even once, let alone 4 times. It doesn't matter what I put in there, even if I put in a method name that does exist and say that I'm expecting it to run 100,000 times it still passes when this is obviously wrong.

I find this very strange since I have similar checks in previous tests which work properly.

Has anyone else experienced problems like this?

Upvotes: 0

Views: 359

Answers (2)

po_taka
po_taka

Reputation: 1846

markTestIncomplete throw special exception, witch end the test. Checks for 'expects' in mocks are skipped.

public static function markTestIncomplete($message = '')
    {
        throw new PHPUnit_Framework_IncompleteTestError($message);
    }

Upvotes: 2

user1578653
user1578653

Reputation: 5028

Found the cause of the problem. It seems to be caused by the call to $this->markTestIncomplete(). For some reason having this in the test causes it not to fail, at least in this case, even when it should.

Removing the call to markTestIncomplete makes it behave normally and fail when it should. I tend to leave the markTestIncomplete method in a test until it is 100% complete, and assume that if I run the test, even in its incomplete state, it should fail if an expectation is not met. Is this not a fair assumption to make? Is this a bug in PHPUnit?

Upvotes: 0

Related Questions