【问题标题】:PHPUnit Code Coverage False Positives?PHPUnit 代码覆盖率误报?
【发布时间】:2018-05-29 17:18:14
【问题描述】:

我用代码覆盖率运行 phpunit,以查看我的哪些类测试较少。

我任意排除了一些文件夹,例如DataFixtures(Doctrine fixtures)和Admin(Sonata Admin classes),结果如下:

我注意到Entity 文件夹全部为红色,但它只包含具有许多标准 getter 和 setter 的类。 Model 文件夹也是如此。

如何在不忽略的情况下测试它们?

【问题讨论】:

  • 你是在问如何用一堆 getter 和 setter 来测试一个类,而不是更多?在这种情况下,您可以编写一个设置和一个值的测试,然后将其取回并检查它是否未更改。我不太了解 PHP,不知道这是否可以以通用方式完成。此类测试通常的价值非常低,而且在没有 100% 覆盖率的情况下生活往往会更好。
  • 是的,这些类只是具有字段、getter 和 setter 的实体。实际方法经过测试。所以我也可以排除实体文件夹?
  • 我会说为一堆数据对象编写测试是一种巨大的浪费时间,但最终取决于您要排除或不排除什么。这归结为意见。但是您是在问您现在是否应该排除该文件夹,还是关于如何测试主要使用 getter 和 setter 的对象的问题仍然存在?
  • 我是通过 meta btw 来到这里的,所以我没有对这个问题投票,但我对你现在所问的问题越来越感到困惑 :) 也许你应该添加更多细节进入问题本身。

标签: php symfony phpunit code-coverage


【解决方案1】:

PHPUnit 提供了一些方法来修改如何使用您的测试上的注释来跟踪覆盖率,例如@covers@coversNothing。您还可以使用@codeCoverageIgnore 将您的代码部分排除在覆盖范围之外。文档中介绍了如何使用它们:https://phpunit.de/manual/current/en/code-coverage-analysis.html

运行测试时,您可以使用command line options 修改其中一些设置:

--strict-coverage           Be strict about @covers annotation usage.
--disable-coverage-ignore   Disable annotations for ignoring code coverage.

如果您的问题不是源于限制对这些实体的覆盖,您应该确定哪些测试使用它们来查看这些方法是否被实际调用。我可以想象你已经嘲笑了它们,这就是它们没有被覆盖的原因。

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 2014-04-16
    • 2012-05-04
    • 2012-08-23
    • 2014-09-01
    • 2011-03-09
    • 1970-01-01
    • 2012-08-04
    • 2014-03-21
    相关资源
    最近更新 更多