Reputation: 1190
I have written a unit test that fails to cover tested methods:
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
:
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
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