3

私はこのコードを持っています:

public function testFoo() {
    $this->object = newBar();
}

しかし、後で、たとえば、メソッドtestAdd()では、$this->objectですnulltestAddの後に実行されtestFooます。

なぜこれが起こるのですか、そしてテストケース全体のためのセットアップのような方法はありますか?

4

2 に答える 2

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
}
于 2012-07-11T23:32:46.583 に答える
1

私はここの前にこれに似た質問をしました:なぜsymfonyDOMCrawlerオブジェクトが依存するphpunitテスト間で適切に渡されないのですか?

shutdown基本的に、明示的に依存させない限り、テスト間で何らかのメソッドが呼び出されますが、これはお勧めできません。setUpただし、各テストに必要なものがある場合は、メソッドをオーバーライドするというオプションがあります。

于 2012-07-11T22:00:55.527 に答える