私はこのコードを持っています:
public function testFoo() {
$this->object = newBar();
}
しかし、後で、たとえば、メソッドtestAdd()
では、$this->object
ですnull
。testAdd
の後に実行されtestFoo
ます。
なぜこれが起こるのですか、そしてテストケース全体のためのセットアップのような方法はありますか?
すべてのテストメソッドは、テストケースクラスの新しいインスタンスで実行されます。実際、各テストの前に呼び出されるセットアップメソッドがあり、それはと呼ばれ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
}
私はここの前にこれに似た質問をしました:なぜsymfonyDOMCrawlerオブジェクトが依存するphpunitテスト間で適切に渡されないのですか?。
shutdown
基本的に、明示的に依存させない限り、テスト間で何らかのメソッドが呼び出されますが、これはお勧めできません。setUp
ただし、各テストに必要なものがある場合は、メソッドをオーバーライドするというオプションがあります。