【问题标题】:Unit tests pass when I change the order of tests当我更改测试顺序时单元测试通过
【发布时间】:2016-05-05 20:36:33
【问题描述】:

在我的单元测试中,我使用以下 getDataSet 方法来设置数据库。测试类扩展自 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;
}

【问题讨论】:

    标签: php unit-testing phpunit


    【解决方案1】:

    getDataSet 在每次测试之前调用,因此每次测试您的数据库表都将被截断并插入提供的数据。

    这就是为什么你的测试顺序无关紧要。

    【讨论】:

    • 这也是我的理解。我在我的代码中发现了问题。我的 setUp 方法没有调用 parent::setUp()。
    • @Scalable 如果您在测试类的setUp 方法中有自己的代码,您确实需要调用parent::setUp()(最好是最后一个):-)
    猜你喜欢
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2017-08-15
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多