美文网首页
PHPUnit 当两个测试方法 @depends 同一个测试方法

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

作者: forks1990 | 来源:发表于2021-12-07 15:30 被阅读0次

    先看一个例子: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 了。

    相关文章

      网友评论

          本文标题:PHPUnit 当两个测试方法 @depends 同一个测试方法

          本文链接:https://www.haomeiwen.com/subject/wrqaxrtx.html