我在测试中设置了一些变量:
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。我做错了什么?
答案 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],
];
}
}