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