كيفية التقاط خطأ" فهرس غير محدد " في الاختبار البسيط?

StackOverflow https://stackoverflow.com/questions/3261051

  •  16-09-2020
  •  | 
  •  

سؤال

وأود أن أكتب اختبار باستخدام سيمبليتيست التي من شأنها أن تفشل إذا كانت الطريقة أنا اختبار النتائج في فب E_NOTICE "مؤشر غير محدد :فو".

حاولت expectError() و expectException() دون نجاح.صفحة ويب سيمبليتيست تشير إلى أن سيمبليتيست ليست قادرة على التقاط أخطاء فب وقت الترجمة ، ولكن E_NOTICE يبدو أن خطأ وقت التشغيل.

هل هناك طريقة للقبض على مثل هذا الخطأ ويجعل اختبار بلدي تفشل إذا كان الأمر كذلك ?

هل كانت مفيدة؟

المحلول

لم يكن ذلك سهلا حقا ولكن تمكنت أخيرا للقبض على E_NOTICE خطأ أردت.كنت بحاجة إلى تجاوز التيار error_handler لرمي استثناء أنني سوف قبض في try{} بيان.

function testGotUndefinedIndex() {
    // Overriding the error handler
    function errorHandlerCatchUndefinedIndex($errno, $errstr, $errfile, $errline ) {
        // We are only interested in one kind of error
        if ($errstr=='Undefined index: bar') {
            //We throw an exception that will be catched in the test
            throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
        }
        return false;
    }
    set_error_handler("errorHandlerCatchUndefinedIndex");

    try {
        // triggering the error
        $foo = array();
        echo $foo['bar'];
    } catch (ErrorException $e) {
        // Very important : restoring the previous error handler
        restore_error_handler();
        // Manually asserting that the test fails
        $this->fail();
        return;
    }

    // Very important : restoring the previous error handler
    restore_error_handler();
    // Manually asserting that the test succeed
    $this->pass();
}

هذا يبدو قليلا معقدة للغاية الحاجة إلى إعادة الإعلان عن معالج الخطأ لرمي استثناء فقط للقبض عليه.كان الجزء الصعب الآخر هو استعادة معالج الخطأ بشكل صحيح عند اكتشاف استثناء ولم يحدث أي خطأ،وإلا فإنه يعبث فقط بمعالجة الأخطاء البسيطة.

نصائح أخرى

ليست هناك حاجة حقا للقبض على خطأ الإشعار.يمكن للمرء أيضا اختبار نتائج 'مجموعة المفاتيح الموجودة' ثم المتابعة من هناك.

http://www.php.net/manual/en/function.array-key-exists.php

اختبار كاذبة وأنها تفشل.

لن تلتقطها أبدا داخل كتلة المحاولة ، لحسن الحظ قمنا بتعيين خطأ():

<?php
function my_handle(){}
set_error_handler("my_handle");
echo $foo["bar"];
?>

يمكنك فعل أي شيء تريده داخل وظيفتي () ، أو اتركه فارغا لإسكات الإشعار ، على الرغم من أنه غير مستحسن.يجب أن يكون المعالج العادي مثل هذا:

function myErrorHandler($errno, $errstr, $errfile, $errline)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top