2014-12-27 38 views
0

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

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); 
} 

测试显然已过,但回线路曾标记为红色和覆盖率报告告诉该方法是不充分测试。

我如何到达“全部绿色”栏?

+3

如果您的测试目标只是为了获得“全部绿色”栏,那么您没有正确测试 –

+1

只要您知道您已经正确测试过,那就没有问题。软件不能识别你已经测试过的事实并不是你的问题。 100%的代码覆盖并不意味着代码是正确的。我喜欢单元测试。 –

回答

0

@Mark Ba​​ker和@Ryan Vincent,正如你所指出的那样,测试只是为了达到“绿色酒吧”不是一个好习惯:我知道。

无论如何,报告会更好地理解一个班级的“健康”。

我没有在单元测试中导航(这是我第一次真正尝试在真实项目中使用它),但我读了很多关于它的内容并发现了相同的想法:测试测试不是好东西。好的,我们都同意这一点。我的问题来自另一个考虑:如果单元测试对于有一个“健康”代码基础是有用的,我认为这也是有用的,当这个代码是共享的(或当我会在很长时间后重新:我使用了很多评论!):另一个开发者可以看到我做了什么,我写了哪些测试,并决定自己测试更多。

因此,看到一个“不绿色的酒吧”,导致新的开发人员检查代码,看他是否可以改进测试,只发现它尚未测试,并且“不完整的酒吧”是由简单的“问题”(一般来说),实际上是微不足道的。

在我看来,这是浪费时间:这是让我达到“绿色酒吧”的原因。

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

当我测试了一些其他使用这些“未完全测试”方法的链接的方法,那么也返回“返回$ this”行作为测试结果。

这使我达到了绿色的酒吧!现在我已经知道了,而且我也确定测试测试也适用于链接工作(这是一件好事)。

+0

感谢您的回答 - 它会帮助我们。 - **新年快乐** :-) –