在phpunit测试之间保留实例变量的任何方法


Any way to preserve instance variables between phpunit tests?

我正在为SOA系统编写功能测试,因此需要从前端测试后端子系统。

这是一个标准的CRUD系统。我有一个测试,测试我是否可以创建一个对象,它返回给我新对象的ID。在随后的测试中,我想编辑然后删除这个对象,但是phpunit似乎每次都重新实例化测试类,所以我丢失了实例变量。

我怎样才能做到这一点?不能在架构中的每个服务器上运行功能测试。

在测试之间传递内容的一种方法是使用 @depends 注释

public function testCreate() {
    //...
    return $id;
}
/**
 * @depends testCreate
 */
public function testDelete($id) {
    // use $id
}

如果你这样做,"delete"测试将被跳过,如果创建不工作。

所以如果服务不工作,你只会得到一个错误,而不是许多失败的测试。


如果你不想这样做,或者因为任何原因与你的情况不匹配,静态类变量也可以是一个选项,但你应该确保你知道你绝对需要它们:)

由于您想要运行每个测试用例一次,您可以在类级别上存储实例变量,例如在静态变量中,或者在外部单例/全局存储中使用get_class($testCase)作为键…

我想我会在运行'编辑'或'删除'之前运行'创建'测试,并相应地设置实例变量。

使用TestCase类的setUp()方法

protected function setUp(): void
{
    parent::setUp();
    //init something
}