【问题标题】:PHPunit coveragePHPunit 覆盖率
【发布时间】:2014-06-07 11:31:32
【问题描述】:

你好!

我正在尝试让 PHPunit 在 localhost 上运行,这是我的一些规范

xDebugger:v 2.2(启用)
php : 5.4.3
PHPunit:尝试使用 3.7.31 && 4.0.17

运行测试工作正常,但是每当我使用 coverage-html 时,输出总是 0% 被覆盖。我已经用两个版本的 PHPunit 都试过了。

每当我尝试 --coverage-text 命令时,我都会得到相同的结果,测试运行良好(失败/成功),但覆盖率为 0%。
1 个测试 - 1 个断言 - 0

为简单起见,我创建了这两个类:

class my
{
  function method()
   {
    $bool = true;
    echo $bool;
   }
}

和测试类:

require_once 'my.php';
class myTest extends PHPUnit_Framework_TestCase
{
function testequal()
    {
    $bool = true;
    echo $bool;
    $this->assertTrue($bool);
    }
}

两个不同的文件,文件名是my.php和myTest.php。
如果我可以提供更多信息,请告诉我,提前谢谢。

【问题讨论】:

    标签: phpunit code-coverage


    【解决方案1】:

    您实际上并没有测试my 的代码。不是吗?这就是覆盖率为 0% 的原因。

    把测试代码改成这样:

    require_once 'my.php';
    class myTest extends PHPUnit_Framework_TestCase
    {
        function testSomething()
        {
            $object = new my();
            $this->assertEquals('1', $object->method());
        }
    }
    

    【讨论】:

    • 我觉得自己完全愚蠢,当然! :) 所以测试函数/真实函数的名称不必匹配?
    • 没问题 ;) 不,它们不必匹配。但他们当然可以。但是当测试变得越来越复杂时,您通常会编写多个测试方法来测试一个方法。至少那时拥有匹配的名称将不再起作用。已将其更改为 foo 名称以避免误解..
    • 检查“回显”输出也不是运行它的最佳方式。只需从 my::method 返回 $bool,然后 $this->assertEquals(true, $object->method());作为测试会更正常。事实上,PHPUnit 可以选择在函数实际输出任何内容时发出警告。
    • 感谢alister的澄清,那个echo是经过多次摆弄后留下的东西,return自然比echo好得多,谢谢!
    猜你喜欢
    • 2012-05-04
    • 2018-05-29
    • 2014-05-30
    • 2012-08-04
    • 2012-01-14
    • 2011-05-27
    • 2012-01-18
    • 2014-04-16
    • 2017-02-22
    相关资源
    最近更新 更多