不能在数据提供者中引用`$ this`

时间:2015-08-12 19:33:28

标签: php phpunit

我在测试中设置了一些变量:

class MyTest extends PHPUnit_Framework_TestCase {
    private $foo;
    private $bar;

    function setUp() {
      $this->foo = "hello";
      $this->bar = "there";
    }

    private function provideStuff() {
        return [
            ["hello", $this->foo],
            ["there", $this->bar],
        ];
    }
}

然后我在provideStuff提供程序中引用这些变量。但它们都是NULL。我做错了什么?

4 个答案:

答案 0 :(得分:0)

数据提供程序在setup()函数之前运行。您可以在数据提供程序中初始化变量吗?或者,可以将赋值放在构造函数中(并记得调用parent)?

答案 1 :(得分:0)

使用setUpBeforeClass和静态变量可能会解决您的问题。

class MyTest extends PHPUnit_Framework_TestCase {
    private static $foo;
    private static $bar;

    public static function setUpBeforeClass() {
      self::$foo = "hello";
      self::$bar = "there";
    }

    private function provideStuff() {
        return [
            ["hello", self::$foo],
            ["there", self::$bar],
        ];
    }
}

答案 2 :(得分:-1)

我在进行单元测试时遇到了同样的问题。我认为这与测试的运行方式有关,但我没有对该主题进行深入研究。以下是我如何解决它:

class MyTest extends PHPUnit_Framework_TestCase {

function setUp() {
  $data['foo'] = "hello";
  $data['bar'] = "there";
 return $data;
}

/**
 * @param array $data
 * @depends setUp
 */
private function provideStuff($data) {
    echo $data['foo'];
} }

它绝对不是最好的解决方案,但它有效:)。

答案 3 :(得分:-2)

我认为您正在尝试重新发明__construct功能

class MyTest extends PHPUnit_Framework_TestCase {
   private $foo;
   private $bar;

   function __construct() {
      $this->foo = "hello";
      $this->bar = "there";
   }

   private function provideStuff() {
      return [
          ["hello", $this->foo],
          ["there", $this->bar],
      ];
   }
}