Покрытие кода PHPUnit для абстрактного класса на уровне 0%, даже если оно четко протестировано

Написание PHP-пакета здесь, TDD с PhpUnit 4+.

Написание тестов для всех моих обычных классов отлично работает, и они описаны в отчете. Но когда я тестирую макет абстрактного класса, даже если тест явно проходит через метод (он терпит неудачу, если я не могу его реализовать или если я помещаю туда некоторые контрольные точки), охват кода составляет 0%.

Я извлек оскорбительный код в репо Вот, если ты хочешь дать ему водоворот. Все, что вам нужно сделать, это клонировать, установить композитор и запустить phpunit, все настроено.

Это выполняется на Vagrant box, поэтому изолированная среда, которая не имеет ничего общего с моей версией PHP или доступными расширениями, была протестирована другие люди, тоже на своих установках, дающих те же результаты.

Тестируемый абстрактный класс Вот, в то время как его тест можно увидеть Вот.

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

Редактировать:

Итак, в качестве дополнительного объяснения, смотрите комментарии к принятому ответу ниже и твиты Джорди Вот. По сути, по соображениям производительности автозагрузчик Composer просто следует регистру файловой системы, в которой он включен, поэтому лучше использовать тот же регистр в папках, что и в именах классов. Если ваше пространство имен в верхнем регистре, ваша папка тоже должна быть. Это все еще оставляет открытым вопрос о том, почему это на самом деле удалось читай и беги метод класса, но не помечал его как покрытый, поэтому, если у вас есть какое-либо понимание этого, пожалуйста, оставьте комментарий или более полный ответ, и я его приму снова.

Изменить 2:

Дополнительное разумное объяснение от dstockto от IRC:

Я считаю, что проблема заключается в том, что когда phpunit собирает информацию о покрытии кода, он находится в массивах PHP. Ключи чувствительны к регистру, и поэтому, несмотря на то, что вы охватили это, охват был для файла с другим регистром, который PHPunit не соответствует файлам, которые были загружены

1

Решение

У меня это работает, и охват составляет 100%. 🙂 Проблема была в следующем:

$ phpunit --verbose --bootstrap vendor/autoload.php
PHPUnit 4.4.2 by Sebastian Bergmann.

Configuration read from /home/ren/tmp/phpunit-oddity/phpunit.xml.dist

E

Time: 151 ms, Memory: 3.25Mb

There was 1 error:

1) Swader\Diffbot\Test\ApiTest::testSetTimeout
PHPUnit_Framework_MockObject_RuntimeException: Class "Swader\Diffbot\Abstracts\Api" does not exist.

Отладка показала, что настоящая проблема заключается в нечувствительной к регистру файловой системе на вашем хосте. Vagrant работает под управлением Linux. каталог abstracts это не то же самое, что Abstracts, PhpUnit в Linux не может найти класс, который ищет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector