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
}
}
我正在努力使我的 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
}
}