我正在使用遗留(无测试)PHP项目,其中包含http://pastebin.com/byBMTAEY
等类实际上所有方法都是静态的,并且大多数方法都是使用单例直接引用数据库(将连接限制为一个)
他们中的大多数还引用了一个名为_COMPANY的全局,它标识了哪个公司正在使用该平台(基于子域)。
我的(非常新手)问题是:对这个班级进行单元测试的最佳方法是什么?我应该对它进行单元测试,因为它的作用是去数据库并在那里做逻辑,然后只是结束结果?
我的意思是,我可以模拟数据库类,然后说“on'one'返回这个结果对象”,但那么我在测试的是什么?一方面,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
}
}