Как проверить объект массива в phpunit? - PullRequest
1 голос
/ 25 февраля 2020

У меня есть функция stati c, приведенная ниже: хочу протестировать эту функцию, используя 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;
}

I создали файл 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 возвращает массив объектов с установленным значением и проверить значения?

Это хороший способ проверки или другой способ проверки объектов массива?

Любая помощь?

1 Ответ

0 голосов
/ 25 февраля 2020

Старайтесь избегать создания более одного утверждения для каждого теста. Вместо этого вы можете подготовить ожидаемый массив и сравнить его с результатом, например, если у вас есть метод:

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().

...