PHPUnit - "Никаких тестов не выполняется" при использовании файла конфигурации
Проблема
Чтобы улучшить качество кода, я решил попробовать узнать, как тестировать свой код с помощью Unit Testing вместо моих посредственных лучших решений для тестирования.
Я решил установить PHPUnit, используя композитор для личной библиотеки, что позволяет мне выполнять общие функции базы данных. Сначала у меня не было файла конфигурации для PHPUnit, и когда я запускал команды вроде:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Обратите внимание, что это команда терминала, поэтому я не добавил расширение .php
. Вышеупомянутый GeneralStringFunctionsTest фактически является файлом GeneralStringFunctionsTest.php
.
Результат - это то, что я ожидал:
Время: 31 мс, Память: 2.75Mb
ОК (1 тест, 1 утверждение)
Затем я попытался использовать файл конфигурации для автоматической загрузки набора тестов вместо того, чтобы каждый раз вручную вводить файл. Я создал файл под именем phpunit.xml
в корневом каталоге и ввел в него файл: http://pastebin.com/0j0L4WBD:
<?xml version = "1.0" encoding="UTF-8" ?>
<phpunit>
<testsuites>
<testsuite name="Tests">
<directory>tests</directory>
</testsuite>
</testsuites>
</phpunit>
Теперь, когда я запускаю команду:
phpunit
Я получаю следующий вывод:
PHPUnit 4.5.0 от Себастьяна Бергмана и авторов.
Конфигурация, прочитанная из /Users/muyiwa/Projects/DatabaseHelper/phpunit.xml
Время: 16 мс, Память: 1.50Mb
Никаких тестов не выполнено!
В случае, если это полезно, моя структура каталогов выглядит следующим образом:
src - Каталог верхнего уровня (со всем исходным кодом)
tests - Каталог верхнего уровня (со всеми моими тестами, структурированными так же, как и папка src)
поставщик - файлы сторонних производителей Composer
У меня также есть композитор json и файл блокировки, а также файл phpunit xml на верхнем уровне в виде файлов.
Вещи, которые я пробовал
- Изменение каталога в
phpunit.xml
на tests/GeneralStringFunctions
- Изменение каталога в
phpunit.xml
на ./tests
- Перемещение файла
phpunit.xml
в каталог tests
, а затем изменение каталога ./
вместо tests
.
- Добавление атрибута суффикса в тег каталога в
phpunit.xml
, чтобы указать "Тесты" как явный суффикс.
Ответы
Ответ 1
Для чего это стоит (опоздание), я столкнулся с этим недавно, когда я создавал новый проект Laravel 5.1 для простого веб-сайта. Я попытался отладить его и смутился, когда попытался:
php artisan make:test homeTest
(у которого есть тест по умолчанию, который только утверждает true, истинно)
и увидел выход
No tests executed!
Какая проблема оказалась для меня связана с моей установкой PHP - "phpunit" был зарегистрирован и настроен по-разному, а phpunit, который поставлялся с установкой Laravel, был настроен правильно и отлично работал.
Итак, исправление запускает настроенный phpunit поставщика (из того же корневого каталога, что и приложение/и тесты /):
./vendor/bin/phpunit
Надеюсь, что это поможет кому-то еще!
Ответ 2
Ваш XML файл в порядке. Однако вы должны убедиться, что файлы PHP в вашей папке tests/
называются следующим образом:
tests/ Test.php < --- Обратите внимание на прописные буквы "T"
Тесты/пользователь test.php
Тесты /Foobar test.php
и др.
Имена файлов должны заканчиваться на "Test.php" . Это то, что ищет PHPUnit внутри каталогов.
Кроме того, каждый метод тестирования должен иметь имя, начинающееся с "test":
public function testFooBar()
{
// Your test code
}
Надеюсь, что это поможет!
Ответ 3
На окнах используйте следующую команду на терминале
.\vendor\bin\phpunit
что если команда
phpunit
возвращает "Тесты не выполнены!"
в то время как на Mac
./vendor/bin/phpunit
Надеюсь, поможет.
Ответ 4
У меня была такая же проблема после PHPUnit на наших виртуальных машинах, обновленных до версии 6. Даже --debug и --verbose ничего полезного не сказал, просто "никаких тестов не выполнено". В конце концов выяснилось, что классы и пространства имен были изменены в новой версии, и он просто не хотел выполнять файлы, содержащие ссылки на старые классы. Исправление для меня было просто заменить в каждом случае:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
с:
use PHPUnit\Framework\TestCase;
class MyTestCase extends TestCase {...}
Ответ 5
Вам нужно просто позвонить из файла поставщика
vendor\bin\phpunit
Уведомление\Не/
Ответ 6
Я понимаю, что это очень старо, но это случилось со мной. Надеюсь, это поможет кому-то.
Моя проблема заключалась в том, что я забыл символ "@" в /** @test */
НЕПРАВИЛЬНО:
/** test */
function a_thread_can_be_deleted()
{
...
}
RIGHT:
/** @test */
function a_thread_can_be_deleted()
{
...
}
Ответ 7
Я потянул волосы за 10 минут, прежде чем решил использовать --debug (хороший способ пойти по пути), чтобы обнаружить тот простой факт, что имя файла не соответствует соглашению об именах, в конце у меня были дополнительные "s",
неправильно
CreateAdminTests
право
CreateAdminTest
надеюсь, что эта записка может помочь кому-то
Ответ 8
если вы используете PHPSTORM, перейдите в Настройки, затем перейдите
-
Test Frameworks
и нажмите + и выберите
-
PHPUnit Local
затем -
Use Composer Auto Loader
затем вставьте его как в путь к полю скрипта -
C:\{YOUR PROJECT NAME}\vendor\autoload.php
- нажмите ОК
-
HAPPY TESTING
Ответ 9
Вы добавили тестовый набор к файлу phpunit.xml?
<phpunit>
<testsuite name="app1" >
<directory>./</directory>
</testsuite>
</phpunit>
Здесь вы можете добавить несколько каталогов.
Ответ 10
Для меня, используя phpunit --debug, я показал, какой тест он не выполнял,
внутри, у меня
$this->visit('/')
->see('Laravel');
и я думаю, потому что каталог был защищен аутентификацией .htaccess, он не смог пройти, чтобы посетить страницу
Решение для меня состояло в том, чтобы вынуть этот тест (или, скорее всего, вывести аутентификацию .htaccess)
Ответ 11
Мой был немного смешным.
Когда я использовал php artisan make:test
я случайно поместил .php как ProductRewardPointController.php
который создал ProductRewardPointController.php.php
и phpunit просто проигнорировал его.
Я просто удаляю лишний .php и все возвращается на круги своя
Ответ 12
Это очень поздно, но я надеюсь, что это кому-то поможет.
Я получил свои тесты для запуска, используя абсолютную ссылку. структура папок [project/tests/test.php]
моя строка каталога выглядела следующим образом. /tests/test.php
Ответ 13
Может быть, немного на стороне, но если вы (как и я) используете Laravel в Vagrant, убедитесь, что вы запускаете phpunit внутри vagrant box, а не на стороне Windows. :)
Ответ 14
У меня была проблема с выполнением тестов, даже когда все было в порядке.
Причиной было то, что пространство имен было не первой командой файла, а после комментариев в блоке документации.
Возврат вызвал phpunit, чтобы увидеть тесты и работать правильно.
Ответ 15
У меня была та же самая проблема Не выполненных тестов! , решается путем сохранения одинакового имени файла и имени класса.
Ответ 16
Проверьте файл phpunit.xml, загляните в наборы тестов.
Моя версия phpunit (2019) ищет файлы, заканчивающиеся (суффикс) * Test.php.
Поэтому убедитесь, что все тестовые файлы имеют правильные имена (например, BookTest.php является правильным, BookTests.php - нет, BookTestCase.php - нет).
Ответ 17
Если вы используете IDE, такие как JetBrains PHPStorm, обратите также внимание на то, что: в окне Run/Debug Configurations
необходимо установить для Test scope
значение directory
и указать этот каталог, где находится папка tests
. расположен.
Мне потребовалось полчаса, чтобы понять, что я забыл установить каталог. Вы можете использовать глобальный phpunit.phar
, если вы правильно зададите область тестирования и каталог, IDE будет обрабатывать другие вещи за вас.
Ответ 18
Вы должны написать абсолютный путь!
<directory>/absolute/path/to/tests</directory>
С уважением.
Ответ 19
используя консоль cmd, разрешили эту проблему, передав удобный путь
Тест реализован
Я не нашел другого способа сделать это
Это не работает с этим способом
Я надеюсь, что это было полезно для кого-то.