我创建了一个模拟数据库类,它将预期的SQL查询作为参数,并将每个调用与预期查询数组进行比较:
class Mock_Database
{
public function __construct(PHPUnit_Framework_TestCase &$testcase, array $expected_queries);
public function run_query($sql);
}
问题我希望它在测试完成时自动检查是否所有查询都已运行。我想让它自动挂入tearDown或类似的东西。有这个问题的解决方案吗?谢谢。
答案 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(/*...*/);
}
}
}