PHP,比较打印输出的MD5是否可以用于测试结果?

PHP,比较打印输出的MD5是否可以用于测试结果?,php,unit-testing,Php,Unit Testing,我正在使用CodeIgniter并试图为模型返回的数据编写测试;CI的测试库在检查内容方面非常有限,因此我一直在这样做: $test = "My Test Name"; $expected = md5(print_r(array(array('val','other'), array('new','old','blue')), 1)); $result = md5(print_r($this->model->method($data), 1)); if($expecte

我正在使用CodeIgniter并试图为模型返回的数据编写测试;CI的测试库在检查内容方面非常有限,因此我一直在这样做:

$test     = "My Test Name";
$expected = md5(print_r(array(array('val','other'), array('new','old','blue')), 1));
$result   = md5(print_r($this->model->method($data), 1));

if($expected == $result) {
    echo "$test [pass]";
}
else {
    echo "$test [fail]";
}

这样测试有什么陷阱吗?是否有一个我没有找到的首选、简单的CI库?内置测试库不允许您使用这种细粒度来检查结果,因此我觉得它没有太大的帮助。

是的,这应该很好,因为如果两者都相同,哈希值也应该相同


但是,为什么不直接检查
print\r
的输出呢?或者,就这一点而言,使用一个完全独立的工具,如用于测试?

假设要比较的两个变量都是数组,请查看内置的
数组_diff()
函数()。如果还需要比较数组的索引,请使用
array\u diff\u assoc()

但是,如果您希望对测试多维数组(就像您的一样)进行完整检查,那么下面的函数可以帮助您完成这项工作:

function compare_arrays($first_array, $second_array, $compare_keys = false){
    /* Test if arrays are actually arrays */
    if(!is_array($first_array)){
        // Elements are not arrays
        if(is_array($second_array)){
            // Second array is not array
            return false;
        }

        if($first_array == $second_array){
            return true;
        }
    } elseif(!is_array($second_array)){
        // Second array is not array (first is)
        return false;
    }

    /* Test same number of elements */
    if(count($first_array) != count($second_array)){
        return false;
    }

    $size = count($first_array);
    if($compare_keys){
        // Load keys to compare
        $first_keys = array_keys($first_array);
        $second_keys = array_keys($second_array);
    }

    for($i = 0; $i < $size; $i++){
        if($compare_keys && $first_keys[$i] != $second_keys[$i]){
            // Keys do not match
            return false;
        }

        if(is_array($first_array[$i])){
            // Element is array
            if(!is_array($second_array[$i])){
                // Matching element in other array is not array
                return false;
            }

            $result = compare_arrays($first_array[$i], $second_array[$i], $compare_keys);
            if(!$result){
                // Sub-arrays do not match
                return false;
            }

            // Match - skip iteration
            continue;
        } elseif(is_array($second_array[$i])){
            // Second array element is array (first is not)
            return false;
        }

        // Elements are not arrays
        if($first_array[$i] != $second_array[$i]){
            return false;
        }
    }

    // Match
    return true;
}
函数比较数组($first\u array,$second\u array,$compare\u keys=false){
/*测试数组是否实际上是数组*/
如果(!is_数组($first_数组)){
//元素不是数组
if(is_数组($second_数组)){
//第二个数组不是数组
返回false;
}
if($first\u array==$second\u array){
返回true;
}
}elseif(!is_数组($second_数组)){
//第二个数组不是数组(第一个是)
返回false;
}
/*测试相同数量的元素*/
if(计数($first_数组)!=count($second_数组)){
返回false;
}
$size=计数($first\u数组);
如果($compare_key){
//加载要比较的关键点
$first_keys=数组_keys($first_数组);
$second\u keys=数组\u keys($second\u array);
}
对于($i=0;$i<$size;$i++){
如果($compare_keys&&$first_keys[$i]!=$second_keys[$i]){
//钥匙不匹配
返回false;
}
if(is_数组($first_数组[$i])){
//元素是数组
如果(!is_数组($second_数组[$i])){
//其他数组中的匹配元素不是数组
返回false;
}
$result=compare_数组($first_数组[$i],$second_数组[$i],$compare_键);
如果(!$result){
//子数组不匹配
返回false;
}
//匹配-跳过迭代
继续;
}elseif(is_数组($second_数组[$i])){
//第二个数组元素是数组(第一个不是)
返回false;
}
//元素不是数组
if($first_数组[$i]!=$second_数组[$i]){
返回false;
}
}
//匹配
返回true;
}
用法:

$br = '<br />';
$array_one = array(4, 5, array(2, 5), 'hello', 'element');

if(compare_arrays($array_one, $array_one)){
    echo 'Match 1'.$br;
} else {
    echo 'No Match 1'.$br;
}

$array_two = array(5, 5, array(2, 5), 'hello', 'element'); // Slightly different

if(compare_arrays($array_one, $array_two)){
    echo 'Match 2'.$br;
} else {
    echo 'No Match 2'.$br;
}

/* Output:
    Match 1
    No Match 2
*/
$br='
'; $array_one=array(4,5,array(2,5),'hello','element'); if(比较数组($array\u one,$array\u one)){ 回显“匹配1”。$br; }否则{ 回显“不匹配1”。$br; } $array_two=数组(5,5,数组(2,5),'hello','element');//略有不同 if(比较数组($array\u one,$array\u two)){ 回声“匹配2”。$br; }否则{ 回显“不匹配2”。$br; } /*输出: 比赛1 没有对手2 */

不需要散列。

不确定如何将PHPUnit与Codeigniter结合使用。老实说,我一开始对编写测试是完全陌生的,但我正在开发一个足够大的代码库,这似乎相当重要。这不是测试的问题,而是简单性的问题。他建议你直接比较这些值,而不是取每个值的MD5和。直接比较消除了计算校验和的开销,并消除了冲突的可能性。。。。如果要检查两个数组是否相等,则出错。。。检查它们是否相等。
if($array1 === $array2) { 
       # the arrays are matched with identical keys and values 
       # no matter how deeply nested
}