Как отображать имя не пройденного теста PHPUnit еще до завершения всех тестов - PullRequest
0 голосов
/ 27 февраля 2019

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

Однако некоторые все еще медленные.

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

Например, в настоящее время, когда я запускаю phpunit tests/Unit/ --verbose, я вижу вывод такой:

PHPUnit 7.5.1 by Sebastian Bergmann and contributors.

Runtime:       PHP 7.2.14-1+ubuntu16.04.1+deb.sury.org+1 with Xdebug 2.6.0
Configuration: /home/vagrant/Code/myproject/phpunit.xml

........F.....

Но хотя я вижу букву "F", мне нужно долго ждать, прежде чем я увижу, какой именно тест провалился.

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

Как?

1 Ответ

0 голосов
/ 27 февраля 2019

У вас есть как минимум 3 варианта:

  1. add --debug flag (после прочтения ваших комментариев кажется, что это не будет делать то, что вам нужно, что показывает в реальном времени, какой тестне удалось)

  2. создать класс принтера и использовать его с флагом --printer

  3. добавить --testdox flag

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

Вам необходимо создать новый класс (обычно в директории / tests).Убедитесь, что этот класс расширяет PHPUnit_TextUI_ResultPrinter.Затем в вашем файле phpunit.xml вы добавляете эти настройки внутри

     printerFile="tests/TestDurationPrinter.php"  <-- filename 
     printerClass="TestDurationPrinter   <-- Class you created.

Мой принтер выглядит следующим образом:

    class TestDurationPrinter extends \PHPUnit_TextUI_ResultPrinter
    {
    /**
     * @param PHPUnit_Framework_Test|PHPUnit_Extensions_PhptTestCase $test
     */
    public function startTest(PHPUnit_Framework_Test $test)
    {
        $this->write(sprintf(
            "\nRunning '%s::%s'...",
            get_class($test),
            $test->getName()
        ));
    }

    /**
     * @param PHPUnit_Framework_Test|PHPUnit_Extensions_PhptTestCase $test
     * @param float $time
     */
    public function endTest(PHPUnit_Framework_Test $test, $time)
    {
        $this->write(sprintf(
            "ended and took ~ %s seconds.",
            round($time)
        ));
    }
}

В вашем случае, я думаю, использования --testdox будет достаточно.Если это не сработает, то я бы порекомендовал создать свой собственный принтер, имейте в виду, что вам все равно нужно получить доступ к результатам теста (который я не знаю, как это сделать), поэтому вам нужно было бы Google,

Надеюсь, это поможет вам.

Редактировать: еще одна вещь, которую вы можете сделать, это добавить флаг

--stop-on-error
, чтобы тесты останавливались, как только появляется ошибка.Там также
--stop-on-failure
(я думаю, это то, что вы хотите).Я всегда использую оба, так как мой набор тестов содержит около 800 тестов, а полное выполнение занимает около 3 минут.
...