为了测试API调用,我想测试一个实体生命周期。
我会使用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
?
答案 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。