تحياتي نبلاء مطوري 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'
)
).
يمكنني تنفيذ رسالة الفشل باستخدام فرق وإجراء طلب سحب. هل تحب هذه الفكرة؟
كيف أقوم بتجاوز الوظيفة بشكل أساسي في رمز المستوى الأعلى الخاص بي:
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" في هذه الحالة) موجودة في الفرق.
ستكون هذه ميزة مفيدة حقًا. هل هناك أي تقدم في هذا؟
التعليق الأكثر فائدة
jmauerhan ، شكرا على الرد
أعتقد أنه لا ينبغي.
إذا رأيت فكرة
assertArraySubset()
بشكل صحيح ، فهي "تأكد من أن المفاتيح التي أحددها في هذه المجموعة الفرعية تتطابق مع البيانات ولا تهمك مفاتيح الراحة".الطريقة التي يستخدم بها فريقنا (وأعتقد أن المستخدمين الباقيين أيضًا) تستخدم
assertArraySubset()
هي التحقق من بعض أهم أجزاء المخرجات.لذلك ، بالتأكيد بالتأكيد لا يجب أن تكون المفاتيح غير المحددة في المجموعة الفرعية ("g" في هذه الحالة) موجودة في الفرق.