我正在尝试在管理数据库连接的类上使用 TDD。然而
- 我经常远离数据库可用的网络进行开发
- 我只想测试不与真实连接混淆的类,即使是 SQLite
:memory:
- 我可能想以独立于平台的方式测试连接(例如,将 PDO 对象交换为 MySQLi 对象等)。尤其是数据库不全是 MySQL,有些是 SQLServer。
基本上我想这样做:
class ConnectionManager {
...
public function getConnection($name) {
$params = $this->lookup($name);
return new \PDO($params['spec'], $params['username'], $params['password']);
}
}
在我的测试运行器中:
class ConnectionManagerTest extends \PHPUnit_Framework_TestCase {
public function testGetConnection() {
$cxn = new ConnectionManager();
$this->assertNotNull($cxn->getConnection('test')); // or whatever
}
}
不知何故,我想使用 PDO 类的模拟。我唯一的选择是向测试类构造函数或其方法之一添加显式参数吗?我已经尝试按照 Mockery 文档使用“实例模拟”,但由于我使用自动加载导致“致命错误无法重新声明类”(duh)。
我不想用纯粹用于测试的代码污染合同,但这是我唯一的选择吗?
谢谢你的帮助