Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPUnit:如何测试自返回方法(返回$this)_Php_Phpunit - Fatal编程技术网

PHPUnit:如何测试自返回方法(返回$this)

PHPUnit:如何测试自返回方法(返回$this),php,phpunit,Php,Phpunit,我有以下方法,该方法返回自身以允许方法链接 class MyClass { public function myMethod() { // Do something return $this; } } 现在,当我测试这个方法时,一切正常。但是PHPUnit代码覆盖率告诉我,最后一行return没有经过测试:“return$this”这一行实际上是用红色标记的,后面是 在我的测试中,我使用它来测试方法是否返回自身: public func

我有以下方法,该方法返回自身以允许方法链接

class MyClass
{
    public function myMethod()
    {
        // Do something

        return $this;
    }
}
现在,当我测试这个方法时,一切正常。但是PHPUnit代码覆盖率告诉我,最后一行return没有经过测试:“return$this”这一行实际上是用红色标记的,后面是

在我的测试中,我使用它来测试方法是否返回自身:

public function testMyMethod()
{
    $myClass = new MyClass;

    // Test that returns true if properly set
    $result = $myClass->myMethod();

    $this->assertInstanceOf('MyClass', $result);
}
测试显然通过了,但返回线始终标记为红色,覆盖率报告表明该方法未经过全面测试


我怎样才能达到“全绿”栏呢?

@Mark Baker和@Ryan Vincent,正如你们所指出的,仅仅为了达到“全绿”栏而进行测试不是一个好习惯:我知道

无论如何,这些报告有助于更好地理解一个班级的“健康状况”

我对单元测试不太感兴趣(这是我第一次真正尝试在实际项目中使用它),但我读了很多关于它的书,发现了同样的想法:为测试而测试不是一件好事。好的,我们都同意这一点

但我的问题来自另一个考虑:如果单元测试对于拥有一个“健康”的代码库是有用的,我认为在共享此代码时(或者当我将在很长时间后重构它时:我使用了很多注释!):另一个开发人员可以看到我做了什么,我编写了哪些测试,并决定自己进行更多的测试

因此,看到一个“非绿色条”,会导致新开发人员检查代码,看看他是否能够改进测试,结果却发现它还没有被测试,“未完成条”仅仅是由一个“问题”(一般来说)产生的,而这个“问题”在现实中并不重要

在我看来,这是浪费时间:这就是让我一直走到“绿色酒吧”的原因

无论如何,回到问题上来,我想我已经找到了问题的原因。 返回$this对于使方法能够相互链接非常有用。 因此,我没有到达绿色栏,因为我的测试没有链接这些方法,所以“return$this”从未测试过。

当我测试一些其他方法时,使用了那些“未完全测试”方法的链接,然后“return$this”行也被测试


这让我走到了绿色的酒吧!现在我知道了,而且我也确信链接的测试也能很好地工作(这是一件好事)。

如果您的测试目标只是获得“全绿”条,那么您没有进行正确的测试,只要您知道您已经正确地进行了测试,那就没问题。事实上,软件没有意识到你已经测试过了,这不是你的问题。100%的代码覆盖率并不意味着代码是正确的。我喜欢单元测试。谢谢你的回答-它将帮助我们。-新年快乐:-)