我正在使用一个遗留(无测试)PHP 项目,其中包含诸如http://pastebin.com/byBMTAEY之类的类
几乎所有的方法都是静态的,并且大多数都使用单例直接引用数据库(将连接限制为一个)
它们中的大多数还引用了一个名为 _COMPANY 的全局变量,它标识了哪个公司正在使用该平台(基于子域)。
我(非常新手)的问题是:单元测试这个类的最佳方法是什么?我是否应该对它进行单元测试,因为它所做的是进入数据库并在那里执行逻辑,然后将结果打包?
我的意思是,我可能可以模拟数据库类,然后说“on 'one' return this result-object”,但是我到底在测试什么?SQL 逻辑不是,一方面,只有创建业务对象的私有函数......这对单元测试来说足够了吗?或者我应该以某种方式对 sql 进行单元测试?还是保留用于集成测试?
请帮助我理解,以便我可以在适用的情况下使用这种做法。
此处还包含示例代码以供参考:
<?php
require_once('DataBase.php');
require_once('businessobjects/User.php');
class UserMgt {
public static function login($email, $pass){
$db = DataBase::getInstance();
$sql = "
SELECT *
FROM user
WHERE login = ? AND password = ? AND active = 1 AND company_id = ?
";
$data = array(
$email, md5($pass), $GLOBALS['_COMPANY']->id,
);
$user = null;
if ($row = $db->one($sql, $data)) { // fetch only one row using the query and parameters
$user = self::copyToUserObject($row); // make a business object
$user->setCapabilities(self::getUserCapabilities($user->getID())); // perform some extra hydration of business object
}
return $user;
}
private static function copyToUserObject($dbrow) {
$user = new User();
// do stuff
return $user;
}
private static function getUserCapabilities($userid) {
// do sql query stuff
// return array
}
}