2016-03-29 4 views
1

Я развиваю на бродячем поле, которое было выполнено на заказ, чтобы служить цели. Моя версия PHPUnit - 5.2.12, а версия Laravel - 5.2.22.

Когда я выполнения phpunit команды, я получаю следующие ошибки:

PHPUnit_Framework_Exception: PHPUnit_Framework_TestCase::$name must not be null. 

код

Ниже мое содержание phpunit.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<phpunit backupGlobals="false" 
     backupStaticAttributes="false" 
     bootstrap="bootstrap/autoload.php" 
     colors="true" 
     convertErrorsToExceptions="true" 
     convertNoticesToExceptions="true" 
     convertWarningsToExceptions="true" 
     processIsolation="true" 
     stopOnFailure="false" 
     stderr="true"> 
    <testsuites> 
     <testsuite name="Application Test Suite"> 
      <directory>./tests/</directory> 
     </testsuite> 
    </testsuites> 
    <filter> 
     <whitelist> 
      <directory suffix=".php">app/</directory> 
     </whitelist> 
    </filter> 
    <php> 
     <env name="APP_ENV" value="testing"/> 
     <env name="CACHE_DRIVER" value="array"/> 
     <env name="SESSION_DRIVER" value="array"/> 
     <env name="QUEUE_DRIVER" value="sync"/> 
    </php> 
</phpunit> 
+0

Возможно, вам нужно добавить код. phpunit.xml и может быть самим тестом. '$ name' должно быть назначено в конструкторе [TestCase constructor] (https://github.com/sebastianbergmann/phpunit/blob/5.2.12/src/Framework/TestCase.php#L275) автоматически после имени класса. –

+0

Можете ли вы мне помочь? @AlexBlex –

+0

Без кода я могу только догадываться. Нет Laravel v 5.2.22 на github https://github.com/laravel/laravel/releases, который не помогает. –

ответ

3

Поэтому в основном проблема был с перезаписанным __construct метод:

class TestCase extends Illuminate\Foundation\Testing\TestCase 
{ 
    public function __construct() 
    { 
     //some code which should not be there 
    } 
} 

Исключение прошло после удаления конструктора.

+0

Я обновил ваш ответ –

+0

Почему вам нужно реализовать конструктор? обычно лучше использовать методы 'setUp' или' setUpBeforeClass'. – gontrollez

+0

@gontrollez, это правильно, нет необходимости. Извините, если это не ясно из ответа. Лучшая формулировка заслуживает высокой оценки. –

1

, удалив конструктор, вы просто избегаете ошибки, а не решаете ее. проблема в том, что вы расширяете класс PHPUnit_Framework_TestCase, у которого есть конструктор с сигнатурой: public function __construct ($ name = null, array $ data = [], $ dataName = ''). проблема? он ожидает $ name, $ data и $ dataName, и вы ничего ему не дали!

так, не удалить конструктор, но переписать его так:

public function __construct($name = null, array $data = [], $dataName = '') { 
    parent::__construct($name, $data, $dataName); 

    // your constructor code goes here. 
} 

я была такая же проблема, и это решается это прекрасно.