PHPUnit returns 0 个覆盖方法

PHPUnit returns 0 coveredmethods

我正在努力使我的 PHPUnit 测试正常工作。 我想要测试覆盖率的结果(它将被上传到声纳)

问题是,当我执行测试时,覆盖的方法仍然为 0...

src/Controller/DefaultController.php :

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;

class DefaultController extends AbstractController
{
    #[Route('/default', name: 'default')]
    public function index(): Response
    {
        return $this->render('default/index.html.twig', [
            'controller_name' => 'DefaultController',
        ]);
    }

#[Route('/default2', name: 'default2')]
public function test2(): Response
{
    $test = 0;

    $test++;

    echo $test;

    return $this->render('default/index.html.twig', [
        'controller_name' => 'DefaultController',
    ]);
}

#[Route('/default3', name: 'default3')]
public function test3(): Response
{
    $test = 0;

    $test++;

    echo $test;

    return $this->render('default/index.html.twig', [
        'controller_name' => 'DefaultController',
    ]);
}
}

tests/DefautTest.php :

<?php

namespace App\Tests;

use PHPUnit\Framework\TestCase;

class DefautTest extends TestCase
{

/**
 * @covers \App\Controller\DefaultController::index
 */
public function testSomething(): void
{
    $this->assertTrue(true);
}
}

phpunit.xml :

<?xml version="1.0" encoding="UTF-8"?>

<!-- https://phpunit.readthedocs.io/en/latest/configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="vendor/phpunit/phpunit/phpunit.xsd"
         backupGlobals="false"
     colors="true"
     bootstrap="tests/bootstrap.php"
     convertDeprecationsToExceptions="false"
>
<php>
    <ini name="display_errors" value="1" />
    <ini name="error_reporting" value="-1" />
    <server name="APP_ENV" value="test" force="true" />
    <server name="SHELL_VERBOSITY" value="-1" />
    <server name="SYMFONY_PHPUNIT_REMOVE" value="" />
    <server name="SYMFONY_PHPUNIT_VERSION" value="9.5" />
</php>

<testsuites>
    <testsuite name="Project Test Suite">
        <directory>tests</directory>
    </testsuite>
</testsuites>

<coverage processUncoveredFiles="true">
    <include>
        <directory suffix=".php">src/Controller</directory>
        <directory suffix=".php">src/Entity</directory>
        <directory suffix=".php">src/Repository</directory>
    </include>
    <report>
        <clover outputFile="result-coverage.xml"/>
        <xml outputDirectory="xml-coverage"/>
    </report>
</coverage>

<listeners>
    <listener class="Symfony\Bridge\PhpUnit\SymfonyTestsListener" />
    <listener class="Symfony\Bridge\PhpUnit\CoverageListener"/>
</listeners>

并且,结果-coverage.xml,coveredmethods = 0... 会是一个;没有?

    <?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1628073827">
  <project timestamp="1628073827">
    <file name="/usr/src/app/src/Controller/DefaultController.php">
      <class name="App\Controller\DefaultController" namespace="global">
        <metrics complexity="3" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="0" elements="15" coveredelements="0"/>
      </class>
      <line num="11" type="method" name="index" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="14" type="stmt" count="0"/>
      <line num="15" type="stmt" count="0"/>
      <line num="19" type="method" name="test2" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="22" type="stmt" count="0"/>
      <line num="24" type="stmt" count="0"/>
      <line num="26" type="stmt" count="0"/>
      <line num="28" type="stmt" count="0"/>
      <line num="29" type="stmt" count="0"/>
      <line num="33" type="method" name="test3" visibility="public" complexity="1" crap="2" count="0"/>
      <line num="36" type="stmt" count="0"/>
      <line num="38" type="stmt" count="0"/>
      <line num="40" type="stmt" count="0"/>
      <line num="42" type="stmt" count="0"/>
      <line num="43" type="stmt" count="0"/>
      <metrics loc="46" ncloc="46" classes="1" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="0" elements="15" coveredelements="0"/>
    </file>
    <metrics files="1" loc="46" ncloc="46" classes="1" methods="3" coveredmethods="0" conditionals="0" coveredconditionals="0" statements="12" coveredstatements="0" elements="15" coveredelements="0"/>
  </project>
</coverage>

如果有人知道为什么我有 coveredmethods = 0...

谢谢

查看代码后,代码覆盖率表示测试执行了哪些代码,现在让我们看一下测试:

<?php

namespace App\Tests;

use PHPUnit\Framework\TestCase;

class DefautTest extends TestCase
{

/**
 * @covers \App\Controller\DefaultController::index
 */
public function testSomething(): void
{
    $this->assertTrue(true);
}
}

基本上这个测试只是断言为真,而不是在控制器上执行代码,标记或注释“@covers”是关于什么应该覆盖测试的表示。

试试这个例子:


namespace App\Tests;

use PHPUnit\Framework\WebTestCase;

class DefautTest extends WebTestCase
{
    public function testFunctional()
    {
        $client = static::createClient();
        $client->request('GET', '/default');
        $this->assertResponseIsSuccessful(); //This method can be different of your version of phpunit
    }
}