Как я могу заставить phpunit запускать тесты из всех файлов в папке? - PullRequest
40 голосов
/ 29 октября 2010

Из того, что я прочитал, похоже, что я должен иметь возможность настроить папку, например tests /, поместите в него несколько файлов с классами модульных тестов, а затем запустите phpunit для этого файла и попросите его найти и запустить тесты.

По какой-то причине в моей установке (на OS X) она считает, что папка test / является файлом, или так может показаться:

$ ls tests
test1.php test2.php
$ phpunit tests/test1.php
PHPUnit 3.5.3 by Sebastian Bergmann.

F

Time: 0 seconds, Memory: 5.00Mb

There was 1 failure:

1) FailingTest::testFail
Your test successfully failed!

/Users/****/tmp/tests/test1.php:4

FAILURES!
Tests: 1, Assertions: 0, Failures: 1.
$ phpunit tests/test2.php
PHPUnit 3.5.3 by Sebastian Bergmann.

.

Time: 0 seconds, Memory: 5.00Mb

OK (1 test, 1 assertion)
$ phpunit tests
PHP Fatal error:  Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

Fatal error: Uncaught exception 'PHPUnit_Framework_Exception' with message 'Neither "tests.php" nor "tests.php" could be opened.' in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php:102
Stack trace:
#0 /usr/local/PEAR/PHPUnit/TextUI/Command.php(157): PHPUnit_Util_Skeleton_Test->__construct('tests', '')
#1 /usr/local/PEAR/PHPUnit/TextUI/Command.php(129): PHPUnit_TextUI_Command->run(Array, true)
#2 /usr/local/bin/phpunit(53): PHPUnit_TextUI_Command::main()
#3 {main}
  thrown in /usr/local/PEAR/PHPUnit/Util/Skeleton/Test.php on line 102

Я надеюсь, что это довольно стандартная установка phpunit через PEAR, следуя этим инструкциям http://www.newmediacampaigns.com/page/install-pear-phpunit-xdebug-on-macosx-snow-leopard, на OS X Snow Leopard.

$ pear version
PEAR Version: 1.9.1
PHP Version: 5.3.2
Zend Engine Version: 2.3.0
Running on: **** 10.4.0 Darwin Kernel Version 10.4.0: Fri Apr 23 18:28:53 PDT 2010; root:xnu-1504.7.4~1/RELEASE_I386 i386
$ phpunit --version
PHPUnit 3.5.3 by Sebastian Bergmann.

Я надеюсь, что кто-то еще столкнулся с этой проблемой, и это просто простое исправление, или я просто делаю что-то не так?

Ответы [ 3 ]

63 голосов
/ 29 октября 2010

Это не ошибка, это особенность.

У вас есть каталог, полный файлов .php, в вашем случае все они содержат тестовые случаи.

Но по мере роста вашего testsuite вы, вероятно, захотите иметь другие php-файлы внутри каталога tests, файлы, которые не содержат тесты, которые существуют исключительно для поддержки тестов.Эти файлы никогда не должны выполняться самим PHPUnit.

Это очень распространенный сценарий.

Итак, как PHPUnit узнает, какие файлы нужно запустить, а какие нет?Проверка суффикса имени файла - это один из способов сделать это - по умолчанию PHPUnit считает все, имя которого заканчивается на Test.php тестом, и игнорирует все остальное .

Вы можете изменить это поведениеесли вы действительно хотите - создав файл phpunit.xml в своем каталоге тестов со следующим содержимым

<?xml version="1.0" encoding="utf-8" ?>
<phpunit>
<testsuite name='Name your suite'>
    <directory suffix='.php'>./</directory>
</testsuite>
</phpunit>

Как только вы это сделаете, PHPUnit запустит все файлы с '.php' в концеимени файла (в этом контексте расширение файла считается частью имени файла)

Но действительно лучше привыкнуть к соглашению и соответствующим образом назвать свои тесты.

25 голосов
/ 21 октября 2013

Более простой способ запустить тест для папки - добавить «Test.php» в конце всех ваших тестов и запустить phpunit, указав вашу папку следующим образом:

phpunit .

или

phpunit your_test_folder/.
23 голосов
/ 29 октября 2010

Раздражает маленькая причуда, но я понял это.

По крайней мере, с конфигурацией по умолчанию тестовые файлы должны заканчиваться "Test.php", например. fooTest.php, или они не найдены исполнителем теста.

...