PHPUnit如何获取类属性?

时间:2014-07-01 15:40:55

标签: phpunit

为了测试API调用,我想测试一个实体生命周期。

  • 没有内容
  • 发布内容,返回ID
  • 修补内容
  • 获取内容
  • 删除内容

我会使用post方法中返回的ID。我在我的测试类中尝试使用私有属性,但在每个方法测试中,属性都被重置。我如何在测试类中使用动态变量进行测试?

我的代码示例和PHPUnit的响应:

class CommentControllerTest extends PHPUnit_Framework_TestCase
{
    private $commentId;

    public function setUp()
    {
    }

    public function testPostValidComment()
    {
        $this->commentId = 42;
    }

    public function testUpdateComment()
    {
        var_dump($this->commentId); // NULL
    }

    public function testDeleteComment()
    {
        var_dump($this->commentId); // NULL
    }
}

为什么我的var_dump($this->commentId);会返回NULL

1 个答案:

答案 0 :(得分:1)

使用@depends批注建立执行顺序并将值从一个测试传递到下一个测试:

class CommentControllerTest extends PHPUnit_Framework_TestCase
{  
    public function testPostValidComment()
    {
        $commentId = 42;
        return $commentId;
    }

    /**
     * @depends testPostValidComment
     */
    public function testUpdateComment($commentId)
    {
        return $commentId;
    }

    /**
     * @depends testUpdateComment
     */
    public function testDeleteComment($commentId)
    {

    }
}

注意:

如果测试失败,其他依赖于它的测试将无法运行。所以使用示例设置:

测试POST - >测试更新 - >测试DELETE

如果UPDATE失败,您将无法知道DELETE是否有效。

要解决此问题,您可以将依赖链更改为:

测试POST - >测试更新 测试POST - >测试DELETE

因此,如果UPDATE失败,将测试DELETE。在这种情况下,POST测试将执行两次,一次用于UPDATE,再次用于DELETE。

PHPUnit docs on dependencies