0

我正在使用一个遗留(无测试)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
    }
}
4

0 回答 0