PHPUnit 当两个测试方法 @depends 同一个测试方法
2021-12-07 本文已影响0人
forks1990
先看一个例子:testPush
和 testPop
都依赖 testEmpty
。
<?php declare(strict_types=1);
use PHPUnit\Framework\TestCase;
final class StackTest extends TestCase
{
public function testEmpty(): array
{
$stack = [];
$this->assertEmpty($stack);
return $stack;
}
/**
* @depends testEmpty
*/
public function testPush(array $stack): array
{
array_push($stack, 'foo');
$this->assertSame('foo', $stack[count($stack)-1]);
$this->assertNotEmpty($stack);
return $stack;
}
/**
* @depends testEmpty
*/
public function testPop(array $stack): void
{
$this->assertSame('foo', array_pop($stack));
$this->assertEmpty($stack);
}
}
那么,testEmpty
会执行几次呢?答案是1次。这意味着对象的状态在三个测试中共享,如果在 testPush
和 testPop
中保持只读访问,是okay的。否则有三种选择:
@depends clone
@depends shallowClone
- 不用
@depends
如果 clone 能解决问题的话,就再好不过了。否则就放弃吧,提前一个公用的方法出来,不要用 @depends
了。