Заранее прошу прощения за неправильное использование терминологии.
В настоящее время я экспериментирую с юнит-тестами, чтобы применить их к своей работе, но теперь я столкнулся с проблемой, если она вообще есть.
В тестируемом объекте выполняется метод, который не помечен как проверенный покрытием кода, хотя он выполняется и тест прошел успешно.
Я уже пробовал, может ли это быть из-за видимости методов (это защищено) или обратного вызова, переданного как параметр, который может вызвать эту «ошибку», изменяя видимость, а также параметры, но это не Кажется, причина не в этом.
Я использую следующую настройку
- php-code-cover 6.1.4
- PHP 7.1.10
- Xdebug 2.6.1
- PHPUnit 7.5.7
В следующем разделе кода вызывается метод extends и передается анонимная функция.
$this->values[$key] = $this->extend($key, function ($previous, ContainerInterface $container) use ($extensionFactory) {
return call_user_func($extensionFactory, $container, $previous);
});
И это тест, в котором выполняются упомянутые методы
public function testContainerRegistersExtensions()
{
/** mocking provider... */
$this->assertEquals(['foo', 'bar'], (new Container([$provider]))->get('value'));
}
Как вы можете видеть на следующих рисунках фрагментах кода (моя репутация не позволяет использовать изображения), код помечен как покрытый (зеленый), но метод расширения является не (красный), хотя он выполняется во время теста:
$this->values[$key] = $this->extend($key, function ($previous, ContainerInterface $container) use ($extensionFactory) {
return call_user_func($extensionFactory, $container, $previous);
});
protected function extend($id, $callable)
{
$factory = $this->values[$id];
$extended = function (ContainerInterface $container) use ($callable, $factory) {
# if the entry to extend is not a callable, we pass it as is
$previous = is_callable($factory) ? $factory($container) : $factory;
return $callable($previous, $container);
};
$this->values[$id] = $extended;
return $this->values[$id];
}
Результат после проведения испытаний выглядит следующим образом
PHPUnit 7.5.7 by Sebastian Bergmann and contributors.
Time: 260 ms, Memory: 6.00 MB
OK (11 tests, 12 assertions)
Generating code coverage report in HTML format ... done
Теперь мне интересно, возможно, я что-то забыл или сделал что-то не так, или это может быть ошибка?