当单独运行时,PHPUnit报告同一测试的不同代码覆盖率%
首先,让我说我已经经历了
Reaching 100% Code Coverage with PHPUnitSO以及
How to get 100% Code Coverage with PHPUnitSO.我无法借助其中任何一个解决问题.
我的问题是,与运行整个测试套件时相比,PHPUnit在隔离运行时报告了相同测试的不同代码覆盖率%.因此,当我使用phpunit test / src / artax / UsesRequestTraitTest仅运行相关的特定测试时,我得到以下覆盖: 但是,如果我使用phpunit运行我的全套测试而没有指定特定的测试,我会收到以下相同的文件: 这是测试的源代码: <?php class UsesRequestTraitTest extends PHPUnit_Framework_TestCase { public function testIsInitiallyEmpty() { $traitObj = $this->getObjectForTrait('artaxUsesRequestTrait'); $this->assertAttributeEmpty('request',$traitObj); return $traitObj; } /** * @depends testIsInitiallyEmpty * @covers artaxUsesRequestTrait::setRequest * @covers artaxUsesRequestTrait::getRequest */ public function testSetterAssignsRequestProperty($traitObj) { $r = new artaxblockshttpHttpRequest(); $traitObj->setRequest($r); $this->assertEquals($r,$traitObj->getRequest()); } } 如果你注意了,你会发现我正在测试PHP5.4的特性.我正在使用PHP5.4RC6和最新的2.2 xdebug trunk版本,因为xdebug的发行版本还不支持PHP5.4. 这可能(可能?)这是xdebug或phpunit中的一个错误,由于对新PHP版本的支持仍在不断发展,但尚未解决,但我想在浪费相关方的时间之前得到其他意见不必要的错误报告.有没有人知道可能导致这种情况或如何纠正它,所以我的极客强迫症并没有让我在100%的覆盖范围内对这个差距感到疯狂? 附:下面是60%覆盖率版本的实际图形覆盖率报告.当测试单独运行时,下面显示为未覆盖的线为绿色(覆盖): UPDATE 我也尝试将特征方法的@covers注释添加到使用特征的具体类的测试中,但这对…没有帮助… 解决方法
这似乎是PHPUnit的新getObjectForTrait方法如何报告特征文件的代码覆盖率的问题.你可以
read about
getObjectForTrait over at Sebastian Bergmann’s blog.
当我使用具体的实现类来测试trait代替内置的getObjectForTrait方法时,错误消失了.因此,对上述发布代码的以下更改可解决此问题: <?php class UsesRequestTraitTest extends PHPUnit_Framework_TestCase { public function testIsInitiallyEmpty() { // trait code coverage not reported correctly using getObjectForTrait //$traitObj = $this->getObjectForTrait('artaxUsesRequestTrait'); // use a concrete implementation instead (see bottom for class definition) $traitObj = new TraitImplementationClass(); $this->assertAttributeEmpty('request',$traitObj->getRequest()); } } // using this class to test instead of getObjectForTrait resolves the issue class TraitImplementationClass { use artaxUsesRequestTrait; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |