私はこのコードを持っています:
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ただし、各テストに必要なものがある場合は、メソッドをオーバーライドするというオプションがあります。