Покрытие кода для строк после методов, которые всегда генерируют исключения - PullRequest
4 голосов
/ 09 ноября 2011

Я понимаю, что 100% -ное покрытие кода - это просто цель, к которой стоит стремиться, но раздражает, что строка, содержащая закрывающую скобку, считается как , не охваченная , потому что она следует за вызовом метода, единственная цель которого состоит в том, чтобыбросить исключение.Вот простой пример из моего базового класса тестового примера, чтобы продемонстрировать:

function checkForSkipAllTests() {
    if (self::$_skipAllTests) {
        self::markTestSkipped();   // [1] always throws an exception
    }                              // [2] shown as executable but not covered
}

Поскольку [1] всегда выходит из метода, строка [2] на самом деле недоступна.Есть ли способ сообщить Xdebug , аннотируя сам метод markTestSkipped()?

Ответы [ 3 ]

5 голосов
/ 09 ноября 2011

Ваш запрос на получение был объединен, поэтому начиная с php-code-покрытие 1.1.2, которое должно появиться довольно скоро (с PHPUnit 3.6.3 или 3.6.4), можно написать:

private static function checkForSkipAllTests() {
    if (self::$_skipAllTests) {
        self::markTestSkipped();
    } // @codeCoverageIgnore
}

Кроме того, в далеком будущем, когда xDebug сможет обеспечить покрытие «Условные обозначения», я думаю, что я помню обсуждение вопроса о том, чтобы решить весь вопрос с этим рефакторингом, поскольку закрывающая скобка будет считаться как »"когда последний оператор в функции завершает функцию ... Но я могу ошибаться в этом

3 голосов
/ 09 ноября 2011

Вы можете окружить строку комментариями stard / end, чтобы PHP_CodeCoverage игнорировал ее, но это означает, что это следует делать везде, где вызывается метод.

function checkForSkipAllTests() {
    if (self::$_skipAllTests) {
        self::markTestSkipped();
    // @codeCoverageIgnoreStart
    }
    // @codeCoverageIgnoreEnd
}

Это кошмар обслуживания и подвержен ошибкам. Я действительно хотел бы избежать этого решения.

2 голосов
/ 09 ноября 2011

Я понимаю, что 100% -ное покрытие кода - это просто цель, к которой нужно стремиться, но раздражает, что строка, содержащая закрывающую фигурную скобку, считается не покрытой, поскольку она следует за вызовом метода, единственная цель которого - вызвать исключение. Вот простой пример из моего базового класса теста для демонстрации:

Действительно, 100% покрытие кода не является целью, но это приятно, особенно если вам понадобится ноль времени, чтобы сделать это. Я действительно задаюсь вопросом, хотя; ваши тесты не являются файлами, которые должны быть проверены. Я никогда не тестирую свои тесты, и меня не интересует их охват кода. Я уже знаю, какие тесты были выполнены, какие прошли успешно, какие не пройдены, а какие пропущены. Это то, что PHPUnit приносит на стол для меня; .....S...F достаточно обратной связи.

Мои тесты находятся в отдельном каталоге, который не включен в покрытие кода; в моих глазах это кажется бесполезным. В любом случае, если вы продали отчеты о покрытии кода на ваших тестовых примерах, вы можете просто избавиться от }, например:

function checkForSkipAllTests() {
    if (self::$_skipAllTests)
        self::markTestSkipped();
}

Да, я знаю, что наличие if без фигурных скобок сделает меня наименее крутым человеком, отвечающим на ваш вопрос, но это кажется гораздо более простым решением, чем некоторые аннотации, которые волшебным образом работают.

...