Oli
Oli

Reputation: 1190

PHPUnit coverage does not cover static method

I have written a unit test that fails to cover tested methods:

enter image description here

As seen by the picture (rendered by phpunit --coverage-html), lines covered are 85-90%, how is it possible then that no function or method is covered in the same class?

Covered code in getPropertyValue:

enter image description here

Test:

class ClassHelperTest extends TestCase
{
    /**
     * @throws \Jad\Exceptions\JadException
     */
    public function testSetPropertyValue()
    {
        $class = new TestClass();
        ClassHelper::setPropertyValue($class, 'property1', 'test');
        $this->assertEquals('test', ClassHelper::getPropertyValue($class, 'property1'));
    }

    public function testHasPropertyValue()
    {
        $class = new TestClass();
        $this->assertFalse(ClassHelper::hasPropertyValue($class, 'testProperty'));
        $this->assertTrue(ClassHelper::hasPropertyValue($class, 'property1'));
        $this->assertTrue(ClassHelper::hasPropertyValue($class, 'property2'));
    }
}

class TestClass
{
    public $property1;

    public $property2;

    public function getProperty2()
    {
        return 'prop2';
    }
}

PHPUnit version 6.1.3

Update! A working example of 100% coverage which includes testing for the exception (thanks Maxim):

/**
 * @throws \Jad\Exceptions\JadException
 * @expectedException \Jad\Exceptions\JadException
 * @expectedExceptionMessage Property [property3] not found in class [Jad\Tests\TestClass]
 */
public function testGetPropertyValue()
{
    $class = new TestClass();
    ClassHelper::setPropertyValue($class, 'property1', 'test');

    $this->assertEquals('test', ClassHelper::getPropertyValue($class, 'property1'));
    $this->assertEquals('prop2', ClassHelper::getPropertyValue($class, 'property2'));
    $this->expectException(ClassHelper::getPropertyValue($class, 'property3'));
}

Upvotes: 1

Views: 1003

Answers (1)

Maxim Krizhanovsky
Maxim Krizhanovsky

Reputation: 26739

The code coverage shows that you didn't reach the point at which the code throws an exception, which seems correct as you don't have any test case that asserts exception being thrown. The getPropertyValue is tested only by the testSetPropertyValue which uses the happy path.

Upvotes: 3

Related Questions