我正在使用代码点火器并尝试为我的模型返回的数据编写测试; 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?内置的测试库不允许您使用这种精细的粒度检查结果,因此我发现它不是非常有用。
答案 0 :(得分:2)
是的,这应该可以正常工作,就像两者都是相同的一样,哈希也应该是相同的。
但是,为什么不直接检查print_r
的输出?或者,就此而言,使用完全独立的工具(如PhpUnit
进行测试?
答案 1 :(得分:0)
假设您要比较的两个变量都是数组,请查看内置的array_diff()
函数(http://php.net/manual/en/function.array-diff.php)。如果您还需要比较数组的索引,请改用array_diff_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;
}
用法:
$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
*/
答案 2 :(得分:0)
if($array1 === $array2) {
# the arrays are matched with identical keys and values
# no matter how deeply nested
}
不需要散列。