类变量在每次php单元测试后重置


Class variables reset after every phpunit test

在我的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,当第二个数据集开始测试时,重置数组和$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]],
    ];
}