【发布时间】:2013-12-11 22:41:28
【问题描述】:
我有这个方法,我想对其进行单元测试。由于它是在方法内部创建 Sql 对象,所以我无法模拟它。
最初我考虑让 Sql 成为一个实例属性,但每次在其他方法中使用它时我都必须重置它,这很可能会导致难以调试的错误(我不希望这种可能性如果可以避免的话,在其他后续调用它的 getter 时获得一个“脏”的 Sql 对象)。
测试这些方法的常见模式是什么?
public function getConfigFromDb()
{
if (!is_null($this->configInDb)) {
return $this->configInDb;
}
$sql = new Sql($this->getSlaveDbAdapter());
$select = $sql->select()
->from('mytable');
$statement = $sql->prepareStatementForSqlObject($select);
$results = $statement->execute();
$results->buffer();
$this->configInDb = $return;
return $results;
}
【问题讨论】:
-
在您的情况下,我将添加一个 SqlFactory 并将其注册为服务(在服务管理器配置中的工厂参数中),这样您就可以轻松地模拟服务以及您将从中获得的对象.
-
@SmasherHell 为什么您将其发布为评论而不是答案?这看起来非常合理。
标签: php unit-testing zend-framework2