假设我有一个处理与 MySQL 数据库的连接的小类:
class myDatabaseHandler{
private $_databases;
public function addDatabase($name, $dsn, $username, $password){
$this->_databases[$name] = array('dsn' => $dsn, 'username' => $username, 'password' => $password);
return true;
}
public function getDatabase($name){
$connectionInfo = $this->_databases[$name];
$database = new Database($connectionInfo['dsn'], $connectionInfo['username'], $connectionInfo['password']);
$database->doSomeSetup();
$database->attachMoreThings();
return $database;
}
}
我想对这两种方法进行单元测试:
class myDatabaseHandlerTest extends \PHPUnit_Framework_TestCase
{
public function testAddDatabase(){
}
public function testGetDatabase(){
}
}
我该如何测试这两种方法?如果 I addDatabase()
,最多它会返回一个Boolean
告诉我操作成功。由于它写入私有财产,我无法确认确实写入了正确的数据。
我觉得使用getDatabase()
来获取数据库对象并对其进行测试并不完全理想,因为我需要公开dsn
,username
并且password
只是为了测试。此外,Database
对象可能会将这些值修改为它使用的格式,因此我需要存储原始值仅用于测试。
解决这个问题的最佳方法是什么?