2017-02-20 5 views
3

Я пытаюсь запустить несколько функциональных тестов в Symfony, но они не сработают. Запуск PHPUnit таргетирования целые AppBundle результаты «Нет тестов, выполненных», и нацеливание его к определенному классу получает мне эту ошибку:Phpunit не работает Тесты Symfony

$ phpunit tests/AppBundle/ApplicationAvailabilityFunctionalTest.php 
PHP Fatal error: Uncaught PHPUnit\Runner\Exception: Class 'tests/AppBundle/ApplicationAvailabilityFunctionalTest' could not be found in '/home/.../tests/AppBundle/ApplicationAvailabilityFunctionalTest.php'. in phar:///usr/local/bin/phpunit/phpunit/Runner/StandardTestSuiteLoader.php:107 

Позже я узнал, что модульные тесты не работают, а также, то же самое сообщение об ошибке.

Функциональный тест, который я пытаюсь запустить, Symfony Best Practices пример:

// tests/AppBundle/ApplicationAvailabilityFunctionalTest.php 
namespace Tests\AppBundle; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase; 

class ApplicationAvailabilityFunctionalTest extends WebTestCase 
{ 
    /** 
    * @dataProvider urlProvider 
    */ 
    public function testPageIsSuccessful($url) 
    { 
     $client = self::createClient(); 
     $client->request('GET', $url); 

     $this->assertTrue($client->getResponse()->isSuccessful()); 
    } 

    public function urlProvider() 
    { 
     return array(
      array('/'), 
      array('/team'), 
      // ... 
     ); 
    } 
} 

Я попытался нацеливание другого класса, DefaultControllerTest, но то же самое исключение обнаружилось. Я запускаю phpunit версии 6.0.7 (скачан как Phar), Symfony 3.2 и PHP 7.0. Я должен был требовать PHPUnit/PHPUnit^4.8 с композитором, так как появилось это исключение:

PHP Fatal error: Class 'PHPUnit_Framework_TestCase' not found in /home/.../vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Test/KernelTestCase.php on line 23 

Я попытался с помощью vendor/bin/phpunit вместо версии .phar, и по крайней мере, он обнаруживает тесты, но все они имеют странные результаты. Он не признает expectException, например:

$ vendor/bin/phpunit -c phpunit.xml.dist 
Error: Call to undefined method Tests\AppBundle\Util\Chart\ChartDataTest::expectException() 

В функциональных тестах, это не похоже, чтобы достичь какой-либо путь, даже если они вполне доступны через браузер:

$ vendor/bin/phpunit -c phpunit.xml.dist 
1) Tests\AppBundle\ApplicationAvailabilityFunctionalTest::testPageIsSuccessful with data set #0 ('/') 
Failed asserting that false is true. 

Is это проблема с версией?

composer.json файл:

{ 
"name": "symfony/framework-standard-edition", 
"license": "MIT", 
"type": "project", 
"description": "The \"Symfony Standard Edition\" distribution", 
"autoload": { 
    "psr-4": { "": "src/" }, 
    "classmap": [ "app/AppKernel.php", "app/AppCache.php" ] 
}, 
"autoload-dev": { 
    "psr-4": { "Tests\\": "tests/" } 
}, 
"require": { 
    "php": ">=5.5.9", 
    "symfony/symfony": "3.2.*", 
    "doctrine/orm": "^2.5", 
    "doctrine/doctrine-bundle": "^1.6", 
    "doctrine/doctrine-cache-bundle": "^1.2", 
    "symfony/swiftmailer-bundle": "^2.3", 
    "symfony/monolog-bundle": "^3.0", 
    "symfony/polyfill-apcu": "^1.0", 
    "sensio/distribution-bundle": "^5.0", 
    "sensio/framework-extra-bundle": "^3.0.2", 
    "incenteev/composer-parameter-handler": "^2.0", 
    "phpunit/phpunit": "^4.8" 
}, 
"require-dev": { 
    "sensio/generator-bundle": "^3.0", 
    "symfony/phpunit-bridge": "^3.0", 
    "doctrine/doctrine-fixtures-bundle": "^2.3" 
}, 
"scripts": { 
    "symfony-scripts": [ 
     "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile", 
     "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget" 
    ], 
    "post-install-cmd": [ 
     "@symfony-scripts" 
    ], 
    "post-update-cmd": [ 
     "@symfony-scripts" 
    ] 
}, 
"config": { 
    "platform": { 
     "php": "5.5.9" 
    } 
}, 
"extra": { 
    "symfony-app-dir": "app", 
    "symfony-bin-dir": "bin", 
    "symfony-var-dir": "var", 
    "symfony-web-dir": "web", 
    "symfony-tests-dir": "tests", 
    "symfony-assets-install": "relative", 
    "incenteev-parameters": { 
     "file": "app/config/parameters.yml" 
    }, 
    "branch-alias": { 
     "dev-master": "3.2-dev" 
    } 
} 
    } 

Вот phpunit.xml.dist: (в настоящее время в корневой папке, неизмененной с момента создания проекта)

<?xml version="1.0" encoding="UTF-8"?> 
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html --> 
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/4.8/phpunit.xsd" 
     backupGlobals="false" 
     colors="true" 
     bootstrap="app/autoload.php" 
> 
    <php> 
     <ini name="error_reporting" value="-1" /> 
     <server name="KERNEL_DIR" value="app/" /> 
    </php> 

    <testsuites> 
     <testsuite name="Project Test Suite"> 
      <directory>tests</directory> 
     </testsuite> 
    </testsuites> 

    <filter> 
     <whitelist> 
      <directory>src</directory> 
      <exclude> 
       <directory>src/*Bundle/Resources</directory> 
       <directory>src/*/*Bundle/Resources</directory> 
       <directory>src/*/Bundle/*Bundle/Resources</directory> 
      </exclude> 
     </whitelist> 
    </filter> 
</phpunit> 
+0

Можете ли вы опубликовать (по крайней мере, часть автозагрузчика) файлы 'composer.json'? – Matteo

+0

Вы не сказали phpunit, где находится автозагрузчик. Вам нужно создать файл phpunit.xml. – DevDonkey

+0

@DevDonkey не phpunit.xml.dist позаботится об этом? – LuteceTheCrab

ответ

2

Это был вопрос версии, кажется: по какой-то причине, когда Symfony проект был создан, версия PHP была установлена ​​в 5.5, что сдерживало более поздние версии PHPUnit. Когда я загрузил версию PHAR, это была версия 6.0 (которая не работала с версией проекта, с которым я работал - PHP 5.6), но была запущена, так как мой php-cli был 7.0). PHPUnit 4.8, который прошел через композитора, действительно выполнял тесты ApplicationAvailability (это, по крайней мере, что-то странное происходит с моим кодом, я узнаю об этом позже), но все же было неловкое поведение (понятно, поскольку оно практически не рекомендуется) , Когда я настроил composer.json с PHP 5.6, все было ясно: PHPUnit обновлен до 5.7, что отлично работает с PHP 5.6. Спасибо @mickadoo за указание, что тесты прошли нормально.

Смежные вопросы