【发布时间】:2026-01-28 01:40:02
【问题描述】:
下午好,
我有一堆使用旧的mysql 库(例如mysql_query($sql))的遗留代码,我正在尝试用PHPUnit 对其进行测试(4.8 是由于各种原因在服务器上运行的最新版本)。
有谁知道如何模拟这个数据库连接,以便在运行预定查询时返回预定结果?我尝试使用 getConnection()(根据此处的文档:http://devdocs.io/phpunit~4/database)无济于事。
例如我有这个类:
class Raffle {
...
public static function loadAll($filter=""){
//$filter = mysql_real_escape_string($filter); // protect against SQL injection
$raffles = []; // the array to return
$sql = "SELECT * FROM raffles $filter;"; // include the user filter in the query
$query = mysql_query($sql);
//echo mysql_error();
while($row = mysql_fetch_assoc($query)){
$raffles[] = Raffle::loadFromRow($row); // generate the raffe instance and add it to the array
}
return $raffles; // return the array
}
...
}
(mysql_connect() 调用是在一个名为 db.php 的文件中完成的,该文件会加载到需要它的每个页面上,而不是在类文件本身中。)
提前致谢。
【问题讨论】:
-
你能给我们看一些代码吗,比如连接是如何创建的,它是由 DI 传递的吗?直接在那个使用的类中实例化呢?它可以帮助我们。
-
不确定您所说的 DI 是什么意思,但基本上有一个文件调用
mysql_connect()并带有凭据,然后将其导入每个公共页面。因此,当在页面上加载类时,mysql 连接已经打开。我几乎设法用一种有趣的 Mocking 方法解决了这个问题。如果它有效,我将在明天将其发布为答案:-)!。谢谢! -
by DI 我谈到了依赖注入,请展示你的代码,它比文字更有效地解释一个问题,并找到了解决方案。向我们展示您要测试的功能/方法以及创建连接的方式/位置。好的,祝你好运。
-
谢谢,我还是添加了代码:-)
标签: php mysql unit-testing phpunit