Чтобы улучшить качество кода, я решил попробовать узнать, как тестировать мой код с помощью Unit Testing вместо моих посредственных лучших решений для тестирования.
Я решил установить PHPUnit с помощью композитора для личной библиотеки, что позволяет мне выполнять общие функции базы данных. Сначала у меня не было файла конфигурации для PHPUnit, и когда я запускал команды вроде:
$ phpunit tests/GeneralStringFunctions/GeneralStringFunctionsTest
Обратите внимание, что это команда терминала, поэтому я не включил расширение .php
. Вышеупомянутый GeneralStringFunctionsTest.php
фактически является файлом GeneralStringFunctionsTest.php
.
Результат – то, что я ожидал:
Время: 31 мс, Память: 2.75Mb
OK (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>
во<?xml version = "1.0" encoding="UTF-8" ?> <phpunit> <testsuites> <testsuite name="Tests"> <directory>tests</directory> </testsuite> </testsuites> </phpunit>
во<?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,50 Мб
Никаких тестов не выполнено!
В случае, если это полезно, моя структура каталогов выглядит следующим образом:
src – Каталог верхнего уровня (со всем моим исходным кодом)
tests – Каталог верхнего уровня (со всеми моими тестами, структурированными так же, как и моя папка src )
поставщик – сторонние файлы композитора
У меня также есть композитор json и файл блокировки, а также файл phpunit xml на верхнем уровне в виде файлов.
phpunit.xml
на tests/GeneralStringFunctions
phpunit.xml
на ./tests
phpunit.xml
в каталог tests
а затем изменение каталога, которое должно быть ./
вместо tests
. phpunit.xml
чтобы указать «Тесты» как явный суффикс. Для чего это стоит (опаздываю), я столкнулся с этим недавно, когда я создавал новый проект Laravel 5.1 для простого веб-сайта. Я попытался отладить его и смутился, когда попытался:
php artisan make:test homeTest
(который имеет тест по умолчанию, который только утверждает true)
и увидел выход
No tests executed!
Проблема, с которой я столкнулась, была связана с моей установкой PHP – «phpunit» был глобально зарегистрирован и настроен по-разному, тогда как phpunit, который поставлялся с установкой Laravel, был настроен правильно и отлично работал.
Таким образом, исправление запускает настроенный phpunit поставщика (из того же корневого каталога, что и приложение / и тесты /):
./vendor/bin/phpunit
Надеюсь, это поможет кому-то еще!
Ваш XML-файл в порядке. Тем не менее, вы должны убедиться, что файлы PHP в ваших tests/
папках называются следующим образом:
tests / Test.php <— Обратите внимание на верхний регистр "T"
тесты / пользователь Test.php
тесты / fooBar Test.php
и т.п.
Имена файлов должны заканчиваться на «Test.php» . Это то, что ищет PHPUnit внутри каталогов.
Кроме того, каждый метод тестирования должен иметь имя, которое начинается с «теста»:
public function testFooBar() { // Your test code }
Надеюсь, это поможет!
У меня была такая же проблема после PHPUnit на наших виртуальных машинах, обновленных до версии 6. Даже –debug и –verbose ничего не сказали полезными, просто «никаких тестов не выполнено». В конце концов выяснилось, что классы и пространства имен были изменены в новой версии, и он просто не хотел выполнять файлы, содержащие ссылки на старые классы. Исправление для меня было просто заменить в каждом случае:
class MyTestCase extends \PHPUnit_Framework_TestCase {...}
с:
use PHPUnit\Framework\TestCase; class MyTestCase extends TestCase {...}
Я понимаю, что это очень старо, но это случилось со мной. Надеюсь, это поможет кому-то.
Моя проблема заключалась в том, что я забыл символ «@» в / ** @test * /
НЕПРАВИЛЬНО:
/** test */ function a_thread_can_be_deleted() { ... }
ПРАВИЛЬНО:
/** @test */ function a_thread_can_be_deleted() { ... }
Вы добавили тестовый набор в файл phpunit.xml?
<phpunit> <testsuite name="app1" > <directory>./</directory> </testsuite> </phpunit>
Вы можете добавить несколько каталогов.
Для меня, используя phpunit –debug, я показал, какой тест он не выполнял, внутри, у меня было
$this->visit('/') ->see('Laravel');
и я думаю, потому что каталог был защищен аутентификацией .htaccess, он не смог пройти, чтобы посетить страницу
Решение для меня состояло в том, чтобы вынуть этот тест (или, скорее всего, вывести аутентификацию .htaccess)
Вы должны написать абсолютный путь!
<directory>/absolute/path/to/tests</directory>
С уважением.
используя консоль cmd, разрешили эту проблему, передав протестированный путь.
Я не нашел другого способа сделать это. Это не работает.
Я надеюсь, что это было полезно для кого-то