我改变测试顺序时单元测试通过

时间:2016-05-05 20:36:34

标签: php unit-testing phpunit

在我的单元测试中,我使用以下getDataSet方法来设置DB。测试类扩展自扩展PHPUnit_Extensions_Database_TestCase

在每次测试之前,框架似乎没有删除并重新插入行。我觉得这种方式的原因是因为当我改变某些测试的顺序时我的测试正在通过,这应该永远不会发生。

那么,任何人都可以建议我做错了什么..或者我应该在哪里寻找更多的洞察力?

另外,我不得不使用复合数据集,因为一些较旧的灯具是xml格式,而新灯具是数组格式。虽然没有xml灯具需要这个。

public function getDataSet()
{

    $compositeDs = new PHPUnit_Extensions_Database_DataSet_CompositeDataSet();
    /** @var  PHPUnit_Extensions_Database_DataSet_FlatXmlDataSet $ds */
    $arrayDS = new ArrayDataSet([
        __DIR__ . '/seed-data/companies.php',
    ]);

    $compositeDs->addDataSet($arrayDS);

    return $compositeDs;
}

可能是因为我保存pdo连接并重用它吗?如下所示

final public function getConnection()
{
    if ($this->conn === null) {
        if (self::$pdo == null) {
            self::$pdo = new PDO($GLOBALS['DB_DSN'], $GLOBALS['DB_USER'], $GLOBALS['DB_PASSWD']);
        }
        $this->conn = $this->createDefaultDBConnection(self::$pdo, $GLOBALS['DB_DBNAME']);
    }

    return $this->conn;
}

1 个答案:

答案 0 :(得分:0)

在每次测试之前调用

getDataSet,因此每次测试都会截断数据表并使用提供的数据插入。

这就是为什么你的考试顺序并不重要。