我有这段代码:
public function testFoo() {
$this->object = newBar();
}
但稍后,例如,在方法testAdd()
中,$this->object
为null
。 testAdd
后执行testFoo
。
为什么会发生这种情况,并且整个测试用例中是否有类似setUp的方法?
答案 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
方法,如果你想为每个测试提供一些东西。