单元测试以数据库为中心的网站

时间:2013-11-03 15:09:14

标签: php unit-testing

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

0 个答案:

没有答案