PHPUnit хранит свойства в тестовом классе - PullRequest
15 голосов
/ 15 марта 2011

Я новичок в PHPUnit.

Это пример тестового класса, который я создал:

class NewTest extends PHPUnit_Framework_TestCase
{
    protected $foo;

    function testFirst ()
    {
        $this->foo = true;
        $this->assertTrue($this->foo);
    }

    /**
     * @depends testFirst
     */
    function testSecond ()
    {
        $this->assertTrue($this->foo);
    }
}

При выполнении testSecond выдается сообщение об ошибке «Undefined property NewTest::$foo».

Почему это происходит? Удаляет ли PHPUnit новые свойства после каждого выполнения теста? Есть ли способ задать свойство в тесте, чтобы оно было доступно в других тестах того же класса теста?

Ответы [ 2 ]

24 голосов
/ 15 марта 2011

Вы устанавливаете свойство foo в методе testFirst().PHPUnit будет сбрасывать среду между тестами / создавать новый экземпляр «NewTest» для каждого метода теста, если у них нет аннотации @depends), поэтому, если вы хотите, чтобы foo был установлен на true, вам нужно пересоздатьэто состояние в зависимом тесте или используйте метод setup().

С setup() ( документы ):

class NewTest extends PHPUnit_Framework_TestCase
{
    protected $foo;
    protected function setup()
    {
        $this->foo = TRUE;
    }
    function testFirst ()
    {
        $this->assertTrue($this->foo);
    }
    /**
     * @depends testFirst
     */
    function testSecond ()
    {
        $this->assertTrue($this->foo);
    }
}

С @depends ( документы ):

class NewTest extends PHPUnit_Framework_TestCase
{
    protected $foo;
    function testFirst ()
    {
        $this->foo = TRUE;
        $this->assertTrue($this->foo);
        return $this->foo;
    }
    /**
     * @depends testFirst
     */
    function testSecond($foo)
    {
        $this->foo = $foo;
        $this->assertTrue($this->foo);
    }
}

Все вышеперечисленное должно пройти.

РЕДАКТИРОВАТЬ пришлось удалить решение @backupGlobals.Это было просто неправильно.

4 голосов
/ 15 марта 2011

Как правило, вы хотите избежать влияния одного теста на другой тест. Это гарантирует, что тест чистый и всегда работает, а не в каком-то крайнем случае, который создает test1.

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