当单独运行时,PHPUnit报告同一测试的不同代码覆盖率%

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了当单独运行时,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('artax\UsesRequestTrait');
    $this->assertAttributeEmpty('request',$traitObj);
    return $traitObj;
  }

  /**
   * @dePEnds testIsInitiallyEmpty
   * @covers artax\UsesRequestTrait::setRequest
   * @covers artax\UsesRequestTrait::getRequest
   */
  public function testSetterAssignsRequestPRoperty($traitObj)
  {
    $r = new artax\blocks\http\HttpRequest();
    $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('artax\UsesRequestTrait');

    // 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 artax\UsesRequestTrait;
}

脚本宝典总结

以上是脚本宝典为你收集整理的当单独运行时,PHPUnit报告同一测试的不同代码覆盖率%全部内容,希望文章能够帮你解决当单独运行时,PHPUnit报告同一测试的不同代码覆盖率%所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。