【发布时间】:2015-03-24 21:02:03
【问题描述】:
几个月前我在我们的开发过程中引入了单元测试。
我刚刚遇到了这个问题:我为一个简单的函数编写了一个测试用例,并且依赖于一个数据库查询。我使用了一个模拟对象而不是数据库适配器对象。测试通过了,到目前为止一切顺利。
但这是误报。模拟对象从数据库返回了预期的结果集(它必须,因为它是一个模拟对象),但真正的查询由于拼写错误而没有返回有效的结果集。
我可以解决此问题的一种方法是,如果查询未产生记录集,则引发异常。
$db->query($query);
$resultset = $db->fetchAll();
if(!is_array($resultset)) throw new UnexpectedValueException("Query does not yield a result set");
这种方法只会使整个脚本失败(如果没有捕获异常),测试肯定会失败。
我的问题是:这是正确的方法,还是您会推荐其他方法?
【问题讨论】:
标签: php mysql database unit-testing mocking