在PHPUnit中外部挂钩单元测试的“拆除”

时间:2012-05-03 21:00:45

标签: mocking phpunit

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

并在验证方法中抛出PHPUnit_Framework_ExpectationFailedException - 如果出现问题:

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

        if (!$allQueriesExecuted) {
            throw new PHPUnit_Framework_ExpectationFailedException(/*...*/);
        }
    }
}