PHPUnit 测试:null 与预期类型“array”不匹配
PHPUnit Testing: null does not match expected type “array”
我正在尝试为一个名为 mapAddressParams
的函数创建测试用例。
我将一个请求参数传递给该函数,它应该 return 地址数组值。但它不是 returning 数组而是 returning
null does not match expected type "array"
我已经查看了一些参考资料,但没有得到解决方案,请指导我。
下面是我的示例代码。
父级 Class :
Class Address_Model_Client_ValidateAddressClient
{
/**
* @param $params
*/
public function mapAddressParams($params)
{
$params['ValidateAddress']['CityName'] = $params['city'];
$params['ValidateAddress']['PostalZone'] = $params['postcode'];
$params['ValidateAddress']['StreetName'] = $params['street'];
$params['ValidateAddress']['BuildingNumber'] = $params['houseno'];
$params['ValidateAddress']['District'] = !empty($params['district']) ? $params['district'] : "";
$params['ValidateAddress']['Country']['IdentificationCode'] = "DEU";
$params['ValidateAddress']['Country']['Name'] = "DEU";
$params['ValidateAddress']['HouseNumberAddition'] = $params['addition'];
return $params;
}
}
测试用例Class:
use PHPUnit\Framework\TestCase;
class Address_Model_Client_ValidateAddressClientTest extends TestCase
{
/** @var $validateAddressClient Address_Model_Client_ValidateAddressClient */
protected $validateAddressClient;
/** @var $validateAddressClientMethods Address_Model_Client_ValidateAddressClient */
protected $validateAddressClientMethods;
public function setUp()
{
$this->validateAddressClient = $this
->getMockBuilder('Address_Model_Client_ValidateAddressClient')
->disableOriginalConstructor()
->setMethods()
->getMock();
$this->validateAddressClientMethods = $this
->getMockBuilder('Address_Model_Client_ValidateAddressClient')
->disableOriginalConstructor()
->setMethods(['mapAddressParams'])
->getMock();
}
/**
*@covers Address_Model_Client_ValidateAddressClient::mapAddressParams()
*/
public function testMapAddressParams(){
$ip =[
'street'=>1,
'houseno'=>1,
'postcode' =>1,
'city' =>1,
'addition'=>1,
'isCustomer' =>false,
'type'=>'service_address'
];
$actual_arr = $this->validateAddressClientMethods->mapAddressParams($ip);
$expected = [
'street' => 1,
'houseno' => 1,
'postcode' => 1,
'city' => 1,
'addition' => 1,
'isCustomer' =>false,
'type' => 'service_address',
'ValidateAddress' => [
'CityName'=>1,
'PostalZone'=>1,
'StreetName'=>1,
'BuildingNumber'=>1,
'District'=>'',
'Country'=>[
'IdentificationCode'=>'DEU',
'Name'=>'DEU'
],
'HouseNumberAddition'=>1
]
];
$this->assertEquals($expected,$actual_arr);
}
提前致谢。
解决方法:
删除以下调用:
->setMethods(['mapAddressParams'])
此调用使 PHPUnit 期望您的方法被模拟并使其成为 return null
只要它没有被模拟。
您正在测试方法本身,因此无需模拟它。
All methods used with setMethods() return null unless mocked
我正在尝试为一个名为 mapAddressParams
的函数创建测试用例。
我将一个请求参数传递给该函数,它应该 return 地址数组值。但它不是 returning 数组而是 returning
null does not match expected type "array"
我已经查看了一些参考资料,但没有得到解决方案,请指导我。
下面是我的示例代码。
父级 Class :
Class Address_Model_Client_ValidateAddressClient
{
/**
* @param $params
*/
public function mapAddressParams($params)
{
$params['ValidateAddress']['CityName'] = $params['city'];
$params['ValidateAddress']['PostalZone'] = $params['postcode'];
$params['ValidateAddress']['StreetName'] = $params['street'];
$params['ValidateAddress']['BuildingNumber'] = $params['houseno'];
$params['ValidateAddress']['District'] = !empty($params['district']) ? $params['district'] : "";
$params['ValidateAddress']['Country']['IdentificationCode'] = "DEU";
$params['ValidateAddress']['Country']['Name'] = "DEU";
$params['ValidateAddress']['HouseNumberAddition'] = $params['addition'];
return $params;
}
}
测试用例Class:
use PHPUnit\Framework\TestCase;
class Address_Model_Client_ValidateAddressClientTest extends TestCase
{
/** @var $validateAddressClient Address_Model_Client_ValidateAddressClient */
protected $validateAddressClient;
/** @var $validateAddressClientMethods Address_Model_Client_ValidateAddressClient */
protected $validateAddressClientMethods;
public function setUp()
{
$this->validateAddressClient = $this
->getMockBuilder('Address_Model_Client_ValidateAddressClient')
->disableOriginalConstructor()
->setMethods()
->getMock();
$this->validateAddressClientMethods = $this
->getMockBuilder('Address_Model_Client_ValidateAddressClient')
->disableOriginalConstructor()
->setMethods(['mapAddressParams'])
->getMock();
}
/**
*@covers Address_Model_Client_ValidateAddressClient::mapAddressParams()
*/
public function testMapAddressParams(){
$ip =[
'street'=>1,
'houseno'=>1,
'postcode' =>1,
'city' =>1,
'addition'=>1,
'isCustomer' =>false,
'type'=>'service_address'
];
$actual_arr = $this->validateAddressClientMethods->mapAddressParams($ip);
$expected = [
'street' => 1,
'houseno' => 1,
'postcode' => 1,
'city' => 1,
'addition' => 1,
'isCustomer' =>false,
'type' => 'service_address',
'ValidateAddress' => [
'CityName'=>1,
'PostalZone'=>1,
'StreetName'=>1,
'BuildingNumber'=>1,
'District'=>'',
'Country'=>[
'IdentificationCode'=>'DEU',
'Name'=>'DEU'
],
'HouseNumberAddition'=>1
]
];
$this->assertEquals($expected,$actual_arr);
}
提前致谢。
解决方法:
删除以下调用:
->setMethods(['mapAddressParams'])
此调用使 PHPUnit 期望您的方法被模拟并使其成为 return null
只要它没有被模拟。
您正在测试方法本身,因此无需模拟它。
All methods used with setMethods() return null unless mocked