1

我创建了一个模拟数据库类,它将预期的 SQL 查询作为参数,并将对它的每次调用与预期的查询数组进行比较:

class Mock_Database
{
    public function __construct(PHPUnit_Framework_TestCase &$testcase, array $expected_queries);
    public function run_query($sql);
}

问题是我希望它在测试完成时自动检查是否所有查询都已运行。我想让它自动挂钩到 tearDown 或类似的东西。这个问题有解决方案吗?谢谢你。

4

1 回答 1

0

我有一个类似的问题。这有点不干净,但是您可以尝试在测试后执行断言。“assertPostConditions”将在每个测试用例之后执行:

class Foo_Test extends PHPUnit_Framework_TestCase {
    /**
     * @see PHPUnit_Framework_TestCase::assertPostConditions()
     */
    public function assertPostConditions()
    {
        $this->dbMock->verify();
    }
}

如果出现问题,则在 verify 方法中抛出 PHPUnit_Framework_ExpectationFailedException:

class Mock_Database {
    public function verify()
    {
        // detect differences and assign $allQueriesExecuted

        if (!$allQueriesExecuted) {
            throw new PHPUnit_Framework_ExpectationFailedException(/*...*/);
        }
    }
}
于 2013-02-28T12:58:39.247 回答