PHPUnit 当两个测试方法 @depends 同一个测试方法

2021-12-07  本文已影响0人  forks1990

先看一个例子:testPushtestPop 都依赖 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次。这意味着对象的状态在三个测试中共享,如果在 testPushtestPop 中保持只读访问,是okay的。否则有三种选择:

  1. @depends clone
  2. @depends shallowClone
  3. 不用@depends

如果 clone 能解决问题的话,就再好不过了。否则就放弃吧,提前一个公用的方法出来,不要用 @depends 了。

上一篇下一篇

猜你喜欢

热点阅读