如何访问在另一个PHPUnit测试中初始化的对象

时间:2012-07-11 21:45:48

标签: php phpunit

我有这段代码:

public function testFoo() {
    $this->object = newBar();
}

但稍后,例如,在方法testAdd()中,$this->objectnulltestAdd后执行testFoo

为什么会发生这种情况,并且整个测试用例中是否有类似setUp的方法?

2 个答案:

答案 0 :(得分:2)

每个测试方法都在测试用例类的新实例上执行。确实存在一种在每次测试之前调用的设置方法,它被称为setUp

public function setUp() {
    $this->object = newBar();
}

public function testFoo() {
    // use $this->object here
}

public function testBar() {
    // use $this->object here too, though it's a *different* instance of newBar
}

如果您需要在测试用例的所有测试中共享状态 - 通常是不明智的 - 您可以使用静态setUpBeforeClass方法。

public static function setUpBeforeClass() {
    self::$object = newBar();
}

public function testFoo() {
    // use self::$object here
}

public function testBar() {
    // use self::$object here too, same instance as above
}

答案 1 :(得分:1)

我在此之前提出了类似的问题:Why are symfony DOMCrawler objects not properly passed between dependent phpunit tests?

基本上,在测试之间调用某种shutdown方法,除非你明确地使它们依赖,这是不建议的。一种选择是覆盖setUp方法,如果你想为每个测试提供一些东西。