Подтвердить что ты не робот

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, чтобы указать "Тесты" как явный суффикс.
4b9b3361

Ответ 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>

С уважением.