phpunit - тег @covers не работает - PullRequest
11 голосов
/ 19 мая 2011

Может быть, я упустил детали, но я написал небольшой тестовый пример для метода singleton _clone, но он не показывается, как проверено в отчете о покрытии кода.

 /**
  *   @covers ErrorHandling::__clone
  */
  public function test__cloneNotCloneable(){
    $class = new ReflectionClass('ErrorHandling');
    $method = $class->getMethod('__clone');

    self::assertTrue($method->isFinal(), '__clone method is not final.');
    self::assertTrue($method->isPrivate(), '__clone method is not private.');
 }

Метод __clone - это обычный закрытый / последний __clone () обычного (злого) синглтона.

  /**
   *  Define __clone as final and private to dissallow cloning.
   */
   private final function  __clone(){}

Я знаю, что это, вероятно, излишнее тестирование для этого, но отчет о покрытии кода является своего рода графическим представлением хорошо выполненной работы. Можно ли пометить этот метод как отмеченный в отчете о покрытии кода?

1 Ответ

13 голосов
/ 19 мая 2011

Тег @covers сообщает PHPUnit, что вы намереваетесь проверить указанный метод; не помечает метод как проверенный. Поскольку вы не можете вызвать метод, Xdebug не сообщит PHPUnit, что его код был выполнен, и он никогда не будет рассмотрен в вашем отчете.

Лучше всего сказать PHPUnit игнорировать метод в отчете, используя тег @codeCoverageIgnore docblock.

/**
 * Define __clone as final and private to dissallow cloning.
 *
 * @codeCoverageIgnore
 */
private final function __clone() { }

Вы можете игнорировать любой диапазон строк, заключив их в пару однострочных комментариев начала / остановки.

// @codeCoverageIgnoreStart
private final function __clone() { }
// @codeCoverageIgnoreEnd

Наконец, вы можете игнорировать одну строку, добавив к ней однострочный комментарий.

private final function __clone() { }  // @codeCoverageIgnore
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...