3

我有这个代码:

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

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

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

4

2 回答 2

2

每个测试方法都在测试用例类的新实例上执行。确实有一个 setup 方法在每次测试之前调用,它被称为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
}
于 2012-07-11T23:32:46.583 回答
1

我之前在这里问过一个类似的问题:为什么 symfony DOMCrawler 对象没有在依赖的 phpunit 测试之间正确传递?.

基本上,除非您明确地使它们依赖,否则在测试之间调用某种shutdown方法,这是不建议的。setUp如果每个测试都需要某些东西,则一种选择是覆盖该方法。

于 2012-07-11T22:00:55.527 回答