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

如何访问在另一个PHPUnit测试中初始化的对象,php,phpunit,Php,Phpunit,我有以下代码: public function testFoo() { $this->object = newBar(); } 但是后来,例如,在方法testAdd()中,$this->object是nulltestAdd在testFoo之后执行 为什么会发生这种情况,整个测试用例是否有类似设置的方法?我在这里之前问了一个类似的问题: 基本上,在测试之间调用某种类型的shutdown方法,除非您显式地使它们依赖,这是不建议的。一个选项是覆盖设置方法,如果每个测试都有您想要的内容。

我有以下代码:

public function testFoo() {
    $this->object = newBar();
}
但是后来,例如,在方法
testAdd()
中,
$this->object
null
testAdd
testFoo
之后执行


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

我在这里之前问了一个类似的问题:


基本上,在测试之间调用某种类型的
shutdown
方法,除非您显式地使它们依赖,这是不建议的。一个选项是覆盖
设置
方法,如果每个测试都有您想要的内容。

每个测试方法都在测试用例类的新实例上执行。确实有一个setup方法在每次测试之前被调用,并且它被调用

如果您需要在测试用例的所有测试中共享状态(通常是不明智的),那么可以使用static
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
}

我发现每个测试方法都会调用_构造函数。也许我必须再看一次手册,但不管怎样,这对我来说是一个奇怪的行为(我从SimpleTest迁移而来)。我用类似的方式解决它:受保护函数setUp(){if(!self::$object){self::$object=new Foo();}}@pinepain-当然可以,但是使用
setUp
来模拟
setupforeclass
会不必要地使代码复杂化。哦,我明白了,谢谢,我花了整个晚上来查找此方法文档。不用担心。虽然起初PHPUnit看起来比SimpleTest复杂得多,但它很快就会变得简单。它是以JUnit和类似的实现为模式的,所以知识也会转移。一般来说,我认为以这种方式访问不是一个好主意。问题可能出在错误的设计上。您如何看待在这种情况下使用的测试数据构建器模式?
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
}