PHPUnit 10 - 属性覆盖率

问题描述 投票:0回答:2

是我还是不可能用“新”(它们已经存在了一段时间)属性方法重新创建文档块元数据“@covers”?

我们曾经这样编写测试:

/**
 * @coversDefaultClass \App\Foo
 */
final class FooTest
{
    /**
     * @test
     * @covers ::bar
     */
    public function can_it_bar(): void
    {
    }
}

但就我的一生而言,我似乎无法用

#[CoversClass]
和/或
#[CoversFunction]
重现相同的结果。

有人已经弄清楚了吗?

我们想要开始迁移到属性,因为这里发布了 PHPUnit 12 对文档块中元数据的支持将被删除的消息:

https://github.com/sebastianbergmann/phpunit/issues/4502

提前致谢

php phpunit code-coverage
2个回答
0
投票

您可以在这里找到信息

您在类级别和/或方法级别具有属性,如果它们存在,则注释将被忽略。

希望对你有帮助


0
投票

正如您所说,不可能重现相同的行为,但据我所知,您必须像这样重新编写代码:

<?php

use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\CoversFunction;
use PHPUnit\Framework\Attributes\Test;

#[CoversClass(\App\Foo::class)]
#[CoversFunction('bar')]
final class FooTest
{
  #[Test]
  public function can_it_bar(): void
  {
  }
}

您甚至可以使用 Rector 和自定义 PhpUnit 规则自动执行此操作。

PhpUnit 开发人员有删除许多人使用的功能的烦人习惯,例如,他们删除了大量断言,因为 他们认为不再使用它们是不好的

这次在方法级别不允许

CoversFunction
的理由是:

...方法上允许使用@covers,但混合起来没有意义 测试用例类中的不同覆盖目标)来源

在我看来,最简单的事情就是不再使用

CoversFunction
,只使用
CoversClass

© www.soinside.com 2019 - 2024. All rights reserved.