计算响应和正确答案之间的差异,忽略任何过多的值。如果没有区别,一切都很好;如果有的话,你会得到完整的信息。
//some examples
$responseValues = array('success' => true, 'user_ip' => '212.20.30.40', 'id' => '7629428643'); //success
$errorResponseValues = array('success' => false, 'user_ip' => '212.20.30.40', 'id' => '7629428643'); //failure
$errorResponseValues2 = array('success' => false, 'user_ip' => '212.20.30.40', 'id' => '123'); //failure
$expectedValues = array('success' => true, 'id' => '7629428643'); //what is success
function whatIsWrong($reality, $expectation)
{
return array_uintersect_assoc($reality, $expectation, function($a, $b){return (int)($a == $b);}); //This is slightly dirty, I think the final implementation is up to you
}
var_dump(whatIsWrong($responseValues, $expectedValues)); //array()
var_dump(whatIsWrong($errorResponseValues, $expectedValues)); //array('success' => false)
var_dump(whatIsWrong($errorResponseValues2, $expectedValues)); //array('success' => false, id => 123)
然后你可以使用assertEqual便(whatIsWrong(...),阵列()),这应该输出在失败的差别,或者处理它在几乎所有的首选方式。
这对我来说看起来很干净。 – Matt 2012-08-03 13:49:04
该解决方案只能告诉你测试失败,但不能告诉你究竟出了什么问题,这就是为什么我认为这是“脏”的原因。 – 2012-08-03 13:54:07