Как происходит покрытие тестами методов класса?
Настраивала проект на покрытие тестами (в частности интересует интеграционное тестирование) и, кажется, не правильно поняла как это делать. В частности, после настройки 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%
Получается не важно как назван метод для покрытия конкретного метода конкретного класса? Чтобы покрывать тестами методы и то, что внутри, надо напрямую их вызывать? Как вообще правильно делать так называемое покрытие тестами?
Ответы (1 шт):
Конечно, нужно вызывать методы, которые вы тестируете.
По-первых, в большинстве случаев у метода будут какие-то параметры, он будет возвращать значение. Еще у него могут быть побочные эффекты.
Никакая автоматическая система не сможет за вас догадаться, какие параметры подать на вход метода, какие из них должны считаться допустимыми, как результат метода связан с входящими параметрами. Это знаете только вы.
Далее в методе у вас может быть какая-то логика, т.е. в зависимости от входных параметров могут выполняться разные действия. Опять же, что должно происходить знаете только вы. И какие сценарии проверять тоже знаете только вы.
Поэтому, в тесте придется делать все как надо, а именно:
- подготовить тестовые данные. Это могут быть входящие параметры, глобальное состояние (например, записи в БД).
- вызвать метод с нужными параметрами
- проверить, что произошло то, что ожидается в этом сценарии. Тут речь идет как о результате метода, так и о побочных эффектах, например, изменении состояния в БД.