我有这个代码:
public function testFoo() {
$this->object = newBar();
}
但后来,例如,在方法中testAdd()
,$this->object
是null
。testAdd
之后执行testFoo
。
为什么会发生这种情况,整个测试用例是否有类似 setUp 的方法?
每个测试方法都在测试用例类的新实例上执行。确实有一个 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
}
我之前在这里问过一个类似的问题:为什么 symfony DOMCrawler 对象没有在依赖的 phpunit 测试之间正确传递?.
基本上,除非您明确地使它们依赖,否则在测试之间调用某种shutdown
方法,这是不建议的。setUp
如果每个测试都需要某些东西,则一种选择是覆盖该方法。