Модульное тестирование класса обслуживания Symfony с помощью phpunit - PullRequest
9 голосов
/ 08 марта 2012

У меня есть базовый класс GenericHelper.php в каталоге Foo/BarBundle/Helper

Я зарегистрировал его как сервис в Foo/BarBundle/Resources/config/services.yml:

    parameters:
       generic_helper.class: Foo\BarBundle\Helper\GenericHelper

    services:
       generic_helper:
           class: %generic_helper.class%

и я могу получить к нему доступ командой, выполнив следующее:

    $helper = $this->getContainer()->get('generic_helper');

Теперь я хотел бы протестировать этот класс с помощью PHPUnit; У меня есть следующий код (похож на http://symfony.com/doc/2.0/book/testing.html#unit-tests):

    namespace Foo\BarBundle\Tests\Helper;

    use Foo\BarBundle\Helper\GenericHelper;

    class GenericHelperTest extends \PHPUnit_Framework_TestCase {

        public function testSomeMethod() {
            $helper = new GenericHelper(); //line 10
            $this->assertEquals($helper->someMethod(), SOME_RESULT);
        }
    }

Запуск PHPUnit приводит к следующей ошибке:

    PHP Fatal error:  Class 'Foo\BarBundle\Helper\GenericHelper' not found in /DIR/src/Foo/BarBundle/Tests/Helper/GenericHelperTest.php on line 10

Греппинг для 'GenericHelper' дает только несколько результатов:

  • Сам класс и Тестовый класс
  • файл services.yml
  • appDevDebugProjectContainer файлов в app/cache/dev/, которые имеют все сервисные геттеры

Вопрос (ы) :

  • Запрещает ли Symfony PHPUnit напрямую создавать класс обслуживания?
  • Есть ли способ сделать это без создания контейнера Symfony и последующего доступа к службе (как здесь сделано: Доступ к контейнеру Symfony 2 через юнит-тест? )? Я имею в виду, это все еще просто базовый класс ...

1 Ответ

9 голосов
/ 12 марта 2012

Запуск phpunit с флагом -c, указывающим на каталог, содержащий файл phpunit.xml.dist, решил проблему.Это включает в себя bootstrap.php.cache и, следовательно, необходимые для автозагрузки вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...