В моих тестах 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.
Вам нужно объявить свою собственность как статическую:
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]],
];
}
'firsrt'
, релевантно ли это, но'firsrt'
и'second'
- это ключи, указывающие на массив в массиве (пытаясь ro сказать, что есть 2 набора скобок), вы просто передаетеdp()['first']
в testOne?