2015-11-08 5 views
1

В моих тестах PHPUnit у меня есть тест и поставщик данных, которые предоставляют некоторые целые значения для тестирования. И я делаю с ними несколько логических тестов. После этого я хочу сохранить все эти целочисленные значения в переменной класса.Переменные класса сбрасываются после каждого теста phpunit

private $numbers = []; 

/** 
* @dataProvider dp 
*/ 
public function testOne($data) 
{ 
    foreach($data as $n) 
     array_push($this->numbers, $n); 

    var_dump($this->numbers); 
} 
public function dp() 
{ 
    return [ 
     "first" => [[1,2]], 
     "second" => [[3,4]], 
    ]; 
} 

Выход:

.array(2) { 
    [0] => 
    int(1) 
    [1] => 
    int(2) 
} 
.                 2/2 (100%)array(2) { 
    [0] => 
    int(3) 
    [1] => 
    int(4) 
} 


Time: 9.71 seconds, Memory: 34.00Mb 

Как вы видите, это добавление значения первого набора данных в (1,2) до $numbers и при 2-й набор данных начал тестировать, что-то сбросить массив и $number становится (3,4). Однако я ожидал, что это будет (1,2,3,4).

Можете ли вы сказать мне, почему $numbers массив пуст до second набор данных?

У меня нет метода tearDown().

php -v 
PHP 5.6.14-1+deb.sury.org~precise+1 (cli) 
Copyright (c) 1997-2015 The PHP Group 
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies 
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies 
    with Xdebug v2.3.2, Copyright (c) 2002-2015, by Derick Rethans 

phpunit --version 
PHPUnit 5.0.4 by Sebastian Bergmann and contributors. 
+0

@Spudley :)) Он/Она удалила вниз голос через несколько минут мой комментарий, а потом я удалил свой комментарий. Спасибо. – Eray

+0

Dunno, если это актуально, но '' firsrt'' и '' second'' являются ключами, указывающими на массив внутри массива (например, ro говорит, что есть 2 набора скобок), вы просто передаете 'dp() ['first']' тестировать? – Terminus

+0

@Terminus Мне нужно установить 'массив массива', чтобы получить' $ data' в виде массива. Вот как работают поставщики данных. Если я использую один размерный массив, он отправит '1' в качестве первого аргумента и' 2' в качестве второго аргумента testOne(). – Eray

ответ

2

Вы должны объявить свойство как статические:

private static $numbers = []; 

/** 
* @dataProvider dp 
*/ 
public function testOne($data) 
{ 
    foreach($data as $n) 
     array_push(self::$numbers, $n); 

    var_dump(self::$numbers); 
} 

public function dp() 
{ 
    return [ 
     "first" => [[1,2]], 
     "second" => [[3,4]], 
    ]; 
} 
Смежные вопросы