Phpunit: يجب أن يوفر assertArraySubset () الفرق عند فشل التأكيد

تم إنشاؤها على ٧ يوليو ٢٠١٦  ·  4تعليقات  ·  مصدر: sebastianbergmann/phpunit

تحياتي نبلاء مطوري phpunit
سيتحدث الحديث عن PHPUnit_Framework_Assert::assertArraySubset() مقدم في https://github.com/sebastianbergmann/phpunit/pull/1377

شكرًا جزيلاً على توفير وظيفة التأكيد المفيدة هذه.
إنه جميل جدًا ، لكنه يفتقر إلى شيء واحد مهم جدًا - معلومات حول _ ما هو غير متطابق تمامًا_

ضع في اعتبارك هذا الرمز:

$expected = [
    'a' => 'item a',
    'b' => 'item b',
    'c' => [
        'd' => 'item d',
    ],
];

$this->assertArraySubset($expected, [
    'a' => 'item a',
    'b' => 'item k', // wrong value
    'c' => [
        // 'd' not present
        'g' => 'item g',
    ],
]);

مع التنفيذ الحالي ، من شأنه أن يولد مثل هذا الخطأ:

1) RetrievalCommandManagerTest::checkServicesImportProcess with data set #0 ...
Failed asserting that an array has the subset Array &0 (
    'a' => 'item a'
    'b' => 'item b'
    'c' => Array &1 (
        'd' => 'item d'
    )
).

هل ترى ما هو مريب هنا؟ تخبرك أن المجموعة الفرعية غير صحيحة ، لكنها لا تخبرنا أين _ بالضبط_ هي غير صحيحة.

كيف يجب أن يبدو الخطأ الصحيح:

1) RetrievalCommandManagerTest::checkServicesImportProcess with data set #0 ...
Failed asserting that an array has the subset.
--- Expected
+++ Actual
@@ @@
Array &0 (
       'a' => 'item a'
---    'b' => 'item b'
+++    'b' => 'item k'
       'c' => Array &1 (
---        'd' => 'item d'
       )
).

يمكنني تنفيذ رسالة الفشل باستخدام فرق وإجراء طلب سحب. هل تحب هذه الفكرة؟

typbug

التعليق الأكثر فائدة

jmauerhan ، شكرا على الرد

أعتقد أنه لا ينبغي.
إذا رأيت فكرة assertArraySubset() بشكل صحيح ، فهي "تأكد من أن المفاتيح التي أحددها في هذه المجموعة الفرعية تتطابق مع البيانات ولا تهمك مفاتيح الراحة".

الطريقة التي يستخدم بها فريقنا (وأعتقد أن المستخدمين الباقيين أيضًا) تستخدم assertArraySubset() هي التحقق من بعض أهم أجزاء المخرجات.

لذلك ، بالتأكيد بالتأكيد لا يجب أن تكون المفاتيح غير المحددة في المجموعة الفرعية ("g" في هذه الحالة) موجودة في الفرق.

ال 4 كومينتر

كيف أقوم بتجاوز الوظيفة بشكل أساسي في رمز المستوى الأعلى الخاص بي:

public static function assertArraySubset(array $expectation, array $reality, 
                                         $strict = false, $message = '')
{
//    parent::assertEquals($expectation, $reality, $strict, $message);
    foreach ($expectation as $key => $value) {
        self::assertArrayHasKey($key, $reality, $message);
        if (is_array($value)) {
            self::assertArraySubset($value, $reality[$key], $strict, $message.'['.$key.']');
        } else {
            self::assertEquals($value, $reality[$key], $message.'['.$key.']');
        }
    }
}

هل يجب أن يتضمن فرقك أيضًا مفتاح "g" الموجود ولكنه غير متوقع؟

jmauerhan ، شكرا على الرد

أعتقد أنه لا ينبغي.
إذا رأيت فكرة assertArraySubset() بشكل صحيح ، فهي "تأكد من أن المفاتيح التي أحددها في هذه المجموعة الفرعية تتطابق مع البيانات ولا تهمك مفاتيح الراحة".

الطريقة التي يستخدم بها فريقنا (وأعتقد أن المستخدمين الباقيين أيضًا) تستخدم assertArraySubset() هي التحقق من بعض أهم أجزاء المخرجات.

لذلك ، بالتأكيد بالتأكيد لا يجب أن تكون المفاتيح غير المحددة في المجموعة الفرعية ("g" في هذه الحالة) موجودة في الفرق.

ستكون هذه ميزة مفيدة حقًا. هل هناك أي تقدم في هذا؟

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات

القضايا ذات الصلة

joubertredrat picture joubertredrat  ·  4تعليقات

ezzatron picture ezzatron  ·  3تعليقات

TiMESPLiNTER picture TiMESPLiNTER  ·  3تعليقات

AnmSaiful picture AnmSaiful  ·  4تعليقات

rentalhost picture rentalhost  ·  4تعليقات