我为测试覆盖率设置了项目(特别是,我对集成测试感兴趣),并且似乎没有正确理解如何去做。具体来说,在设置PhpUnit之后,我有一个类:
<?php
namespace app\models;
class Tmp {
public function hello() {
return 1;
}
}
我认为如果您编写一个带有名称的方法并在testHello
那里检查,那么PHPUnit应该自动检查hello
类方法Tmp
(以某种方式创建并在后台检查)。带有测试的类的示例:
<?php
namespace tests\unit\models;
use Codeception\Test\Unit;
class TmpTest extends Unit {
/**
* @var \UnitTester
*/
protected $tester;
protected function _before() { }
protected function _after() { }
public function testHello() {
// Здесь всякие assert'ы
}
}
但覆盖率显示为 0%。当我在方法中直接写方法调用
public function testHello() {
$this->assertEquals(1, (new Tmp())->hello());
}
然后覆盖率显示为 100%
事实证明,如何命名方法以覆盖特定类的特定方法并不重要?要涵盖方法和测试内部的内容,您需要直接调用它们吗?一般怎么做所谓的测试覆盖?
当然,您需要调用您正在测试的方法。
首先,在大多数情况下,该方法会有一些参数,它会返回一个值。它也可能有副作用。
没有自动系统能够为您猜测将哪些参数应用于方法的输入,哪些参数应该被认为是有效的,方法的结果如何与输入参数相关。这个只有你自己知道。
在该方法中,您可以进一步使用某种逻辑,即 可以根据输入参数执行不同的操作。同样,只有你知道应该发生什么。只有您知道要检查哪些场景。
因此,在测试中,您将不得不做所有应该做的事情,即: