tvolf
@tvolf

Не срабатывает расчет покрытия кода при использовании phpUnit из-под Netbeans

Всем привет.
Такая проблема. Имеется машина под Windows 7 64bit, установлен последний PHP 5.5.3, к нему — PEAR и из-под него установлен phpUnit версии 3.7.24. Создал в Netbeans 7.3.1 пустой проект, в нем — файл-пример
Calculator.php вида:

==
<?php 
class Calculator {
    /**
     * assert (0,0) == 0
     * assert (0,1) == 1
     * assert (1,0) == 1
     * assert (1,1) == 2
     * assert (1, 2) == 3
     * 
     */
    public function sum($a, $b) {
        return $a + $b;
    }
}

==
В настройках Netbeans'а прописал пути к phpUnit.bat и phpunit-skelgen.bat. Для проекта указал каталог, где лежат тесты. Сначала выполняю генерацию тестов для указанного файла. В каталоге тестов появляется файл CalculatorTest.php. Сначала обратил внимание, что в этом файле отсутствует строка подключения класса самого Calculator.php, без которой запуск тестов выдывал ошибку о том, что не найден класс Calculator. В общем, подключил руками через require_once (хотя, в общем-то, странно — это постоянно нужно руками прописывать путь к тестируемым классам ?...) Ну да ладно. Тесты, худо-бедно, заработали.

Далее стало интересно посмотреть, как работает расчет покрытия кода. Устанавливаю в меню проекта 2 галки: «Охват кода» -> «Сбор и отображение охвата кода» + «Показать панель редактора». Появляется строка с надписью «Охват кода: 0.00%». Запускаю те же тесты для Calculator.php, но содержимое этой строки так и не меняется. Постоянно выводит нули. В окне «Вывод» никаких необычных сообщений нет.
То есть, phpUnit нормально стартует и выполняет экспорт в XML. XDebug установлен и прописан в php.ini.
Когда нажимаю на кнопку «Отчет» с целью посмотреть результаты расчета кода покрытия, то вижу одну строку: «Нет данных — был ли запущен код?».
Может, кто-то сталкивался с подобным? Как можно решить проблему?
Заранее благодарю за помощь.

ps. Если же просто из командной строки выполнить 2 команды руками:
>phpunit-skelgen --test calculator
>phpunit --coverage-clover report.xml calculatortest
, то формируется нормальный отчет report.xml с ненулевыми данными внутри.
  • Вопрос задан
  • 4193 просмотра
Решения вопроса 1
@nikosias
Такая же ошибка.
Проблема возникает если каталог проекта установлен на другой диск.
Для решения
простое:
Переносим проект на диск где установлена netbeans.
сложное:
в директории создаем файл с таким содержанием:
<?php
class NetBeansSuite extends PHPUnit_Framework_TestSuite {
    public static function suite() {
        $suite = new NetBeansSuite();
        $array=self::rglob("*[Tt]est.php", getcwd());
        foreach ($array as $file) {
            $suite->addTestFile($file);
        }
        return $suite;
    }
    private static function rglob($pattern = '*', $path = '', $flags = 0) {
        $paths = glob($path.'*', GLOB_MARK | GLOB_ONLYDIR | GLOB_NOSORT) or array();
        $files = glob($path.$pattern, $flags) or array();
        foreach ($paths as $path) {
            $files = array_merge($files, self::rglob($pattern, $path, $flags));
        }
        return $files;
    }
}
?>

Это художественно порезанный файл:
C:\Users\%username%\AppData\Roaming\NetBeans\7.3\phpunit\NetBeansSuite.php

В свойства проекта -> PHPUnit-> использовать пользовательский набор тестов устанавливаем ссылку на файл этот файл.

После этого охват кода начинает работать.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Sayonji
Вариантов возможных ответов не мало в интернете.
Самые реалистичные:
1) Проверить, использует ли Netbeans ту же самую установку php, куда поставлено остальное, а не свою собственную.
2) Проверить, не лежат ли Netbeans и файлы проекта на разных локальных дисках.
UPD Ну и банально проверить настройку «Right click on project» — «Properties» — «Sources» — «Test Folder»
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы