我有一个单元测试,用于测试从字符串到整数的变量转换。目前为止一切正常,除了最后一个。
$_GET['name'] = '42000000000000000000000000000000000000';
$text = $input->get( 'name', Convert::T_INTEGER );
$this->assertEquals( 92233720368547755807, $text );
预期的结果是(这已经被测试所证实),将大值转换为整数使用intval()函数会导致溢出,这会默认转换为php系统可以处理的最大整数值。然而,它仍然失败:
Failed asserting that <integer:92233720368547755807> matches expected <double:9.2233720368548E+19>
当我试图将期望的数字转换为整数时:
$this->assertEquals( intval(92233720368547755807), $text );
I get this:
Failed asserting that <integer:92233720368547755807> matches expected <integer:0>
这个测试运行的就是上一个测试所测试的内容...
相关代码:
public function get( $name, $type = null )
{
$value = $_GET['value'];
if( !is_null( $type ) )
$value = Convert::to( $value, $type );
return $value;
}
并且
public static function to( $value, $type )
{
switch( $type )
{
case self::T_INTEGER:
return intval( $value );
default:
return null;
}
}
那么问题就在于:我该如何使这个测试的结果为阳性?