【问题标题】:How to test an array object in phpunit?如何在phpunit中测试数组对象?
【发布时间】:2020-06-08 17:49:52
【问题描述】:

我有一个静态函数如下:想用PHPUnit测试这个函数

One.php:

static function myArray(myArrays $one) {
    $data = [
        "Name" => "name",
        "id" => "_id",
        "addressLine1" => "address1",
        "town" => "town",
        "district" => "district",
        "country" => "country",
        "mobile" => "mobile_number",
        "email" => "email",
        "url" => "_url"
    ];
    $output = [];

    foreach ($data as $myDatas => $value) {
        if ($one->truthy($myDatas)) {
            $field = $one->getField($myDatas);
            $output[$value] = $field; 
        }
    }
    $output['country'] = strtolower($oneninetwo->getField("countryCode", ""));


    return $output;
}

我为此测试创建了一个 JSON 文件:

{ 
    "success":true,
    "data":{ 
       "id":"0001",
       "name":"Pizza",
       "addressLine1":"001 Down Town",
       "addressLine2":null,
       "addressLine3":null,
       "country":"AU",
       "countryCode":"au";
       "mobile":0123456789,
       "email":"test@test.com"
    }
 }

我的测试:

public function testmyArray() {
    $mockreg = $this->getMockRegistry();

    $json = file_get_contents(__DIR__."/src/myjson.json");

    $data = json_decode($json, true);  

    $name = $data['data']['name'];
    $addressLine1 = $data['data']['addressLine1'];
    $addressLine2 = $data['data']['addressLine2'];
    $addressLine3 = $data['data']['addressLine3'];
    $mobile = $data['data']['mobile'];

    self::assertEquals($name, "Pizza");
    self::assertEquals($addressLine1, "001 Down Town");
    self::assertNull($addressLine2);
    self::assertTrue(is_numeric($mobile));


    $test = new class() extends One{ 
        function __construct() {
           $this->myArray();

           ----
        }
    };

}

现在想测试One 类返回一个带有值集的对象数组并检查值吗?

这是测试数组对象的好方法还是另一种测试数组对象的方法?

有什么帮助吗?

【问题讨论】:

    标签: php arrays unit-testing phpunit


    【解决方案1】:

    尽量避免为每个测试用例创建多个断言。相反,您可以准备预期的数组并与结果进行比较,例如,如果您有方法:

    public static function exampleMethod(): array
    {
        // some logic
    
        return [
            'prop1' => 'Lorem ipsum',
            'prop_assoc' => [
                'dolor sit amet',
                'numeric_value' = 1
            ]
        ];
    }
    

    您可以使用以下方法对其进行测试:

    public function testExample(): void
    {
        $expected = [
            'prop1' => 'Lorem ipsum',
            'prop_assoc' => [
                'dolor sit amet',
                'numeric_value' = 1
            ]
        ];
    
        $this->assertSame(ExampleClass::exampleMethod(), $expected);
    }
    

    注意:我使用了检查类型和值的assertSame,所以没有理由使用is_numeric()

    【讨论】:

    • 你能分享一个我测试的例子吗? @user3545751
    • @Beniamin 什么是类包含比较 $expected 不需要的 adicional 信息?
    猜你喜欢
    • 2013-06-21
    • 2017-01-11
    • 2019-08-04
    • 2010-09-23
    • 2012-04-01
    • 1970-01-01
    • 2013-04-04
    • 2018-04-24
    • 2013-10-26
    相关资源
    最近更新 更多