လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> Automated Testing အတွက် is_a () ကိုအသုံးပြုပြီး Mock အမျိုးအစားကိုစစ်ဆေးပါ

Automated Testing အတွက် is_a () ကိုအသုံးပြုပြီး Mock အမျိုးအစားကိုစစ်ဆေးပါ

M66 2025-06-05

အလိုအလျောက်စမ်းသပ်ခြင်းတွင်လှောင်ပြောင်ခြင်း (လှောင်ပြောင်အရာဝတ်ထု) သည်ကျွန်ုပ်တို့၏အသုံးအများဆုံးစမ်းသပ်နည်းစနစ်များထဲမှတစ်ခုဖြစ်သည်။ ၎င်းသည်ကျွန်ုပ်တို့အားစမ်းသပ်ပစ်မှတ်များကိုခွဲထုတ်ရန်နှင့်ပြင်ပစနစ်များသို့မဟုတ်ရှုပ်ထွေးသောအရာဝတ်ထု interaction များကိုအပေါ်မှီခိုမှုကိုရှောင်ရှားရန်ခွင့်ပြုသည်။ လှောင်ပြောင်မှုကိုအသုံးပြုသောအခါဘုံလိုအပ်ချက်မှာမုတ်ဆိတ်မွေးအရာဝတ်ထုသည်လူတန်းစားသို့မဟုတ် interface တစ်ခု၏ဥပမာတစ်ခုရှိမရှိအတည်ပြုရန်ဖြစ်သည်။ ယခုအချိန်တွင် PHP မှပေးသော is_a () function သည်အလွန်အသုံးဝင်သည်။

is_a () ကဘာလဲ?

is_a () သည် PHP တွင် built-in function တစ်ခုဖြစ်ပြီး၎င်းသည်အရာဝတ်ထုတစ်ခုသည်အချို့သောအတန်းတစ်ခု၏ဥပမာတစ်ခုရှိ, မရှိကိုဆုံးဖြတ်ရန်အသုံးပြုသည်။ ၎င်း၏အခြေခံ syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool is_a(object|string $object_or_class, string $class, bool $allow_string = false)
  • $ Office_or_Class : စစ်ဆေးရန်အရာဝတ်ထုသို့မဟုတ်အတန်းအစားအမည်။

  • $ Class : Class သို့မဟုတ် class ကိုသို့မဟုတ် interface အမည်။

  • $ Allow_String : string class name ကိုပထမ ဦး ဆုံး parameter သည်အဖြစ်ခွင့်ပြုမထား။ PHP 8.0 နှင့်နောက်ပိုင်းတွင်ပုံမှန်အားဖြင့် မှားယွင်း သည်။

အလိုအလျောက်စမ်းသပ်အတွက် mock ကိုအသုံးပြုခြင်း

Mock Object အမျိုးအစားကိုဆုံးဖြတ်ရန် IS_A () ကို မည်သို့အသုံးပြုရမည်ကိုသရုပ်ဖော်ရန် PHPunit ကိုဥပမာတစ်ခုအဖြစ်အသုံးပြုကြပါစို့။ Phpunit တွင် ဒေါ်လာ -> Createmock () ဖြင့်ဖန်တီးထားသောအရာဝတ်ထုများကို Simulated ပြုလုပ်သည်, သို့သော်၎င်းတို့သည်မူလအမျိုးအစားအမွေသို့မဟုတ်အကောင်အထည်ဖော်မှုကိုဆက်လက်ထိန်းသိမ်းထားဆဲဖြစ်သည်။

နမူနာကုဒ်

ကျွန်ုပ်တို့တွင်အောက်ပါ interface နှင့်အကောင်အထည်ဖော်မှုရှိသည်ဆိုပါစို့:

 interface LoggerInterface {
    public function log(string $message);
}

class FileLogger implements LoggerInterface {
    public function log(string $message) {
        // ဖိုင်များကိုမှတ်တမ်းတင်ရန်ရေးပါ
    }
}

ကျွန်ုပ်တို့၏စမ်းသပ်မှုတွင်ကျွန်ုပ်တို့သည်တကယ့် filelogger အစားလှောင်ပြောင်အရာဝတ်ထုကိုအသုံးပြုရန်လိုအပ်သည်။

 use PHPUnit\Framework\TestCase;

class SomeTest extends TestCase {
    public function testLoggerMockType() {
        $mockLogger = $this->createMock(LoggerInterface::class);

        $this->assertTrue(is_a($mockLogger, LoggerInterface::class));
        $this->assertFalse(is_a($mockLogger, FileLogger::class));
    }
}

ဤဥပမာတွင် Mock Object သည်သတ်မှတ်ထားသော interface ကိုအကောင်အထည်ဖော်ရန်ကျွန်ုပ်တို့အတည်ပြုပါသည်။ ၎င်းသည်လှောင်ပြောင်သည့်အရာဝတ်ထုတစ်ခုဖြစ်သော်လည်း IS_A () သည် ၎င်း၏အမျိုးအစားသည်ပစ်မှတ် interface နှင့်ကိုက်ညီမှုရှိမရှိကိုမှန်ကန်စွာဆုံးဖြတ်နိုင်သည်။

အဘယ်ကြောင့် instanceof အစား is_a () ကို အသုံးပြု?

PHP တွင်အခြားအလားတူ အော် ပရေတာတစ်ခုရှိပါသည်။ နှစ်ခုအကြားခြားနားချက်မှာ -

  • is_a () သည်အလုပ်လုပ်နိုင်ပြီးအချို့သောပြောင်းလဲနေသောအခြေအနေများတွင်ပိုမိုပြောင်းလွယ်ပြင်လွယ်ရှိနိုင်သည်။

 $className = 'm66.net\\SomeClass';
if (is_a($object, $className)) {
    // တိကျသောယုတ္တိဗေဒ execute
}
  • Instanceof သည် static အခြေအနေများတွင်အသုံးပြုရန်ပိုမိုသင့်တော်သော်လည်းအတန်းအစားအမည်သည်တက်ကြွသော string တစ်ခုဖြစ်သောအခါ is_a () သည်ပိုမိုအဆင်ပြေသည်။

အချို့သောလှောင်ပြောင်သည့်အခြေအနေများတွင်ကွန်တိန်နာတစ်ခုမှလှောင်ပြောင်ရာတွင်လှောင်ပြောင်ရာတွင် 0 န ်ဆောင်မှုကိုထုတ်ယူပါက၎င်းသည်အမျိုးအစားတစ်ခုနှင့်ကိုက်ညီမှုရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။

 $service = $container->get('logger_mock'); // မှ m66.net ဝန်ဆောင်မှုကွန်တိန်နာ
if (is_a($service, LoggerInterface::class)) {
    $service->log('ဒါကမှတ်တမ်းတစ်ခုပါ');
}

မှတ်သားရန်အရာ

  1. အကယ်. သင်သည်အရာဝတ်ထုတစ်ခုအစား အတန်း အစားအမည်တစ်ခုတွင်ဖြတ်သန်းသွားပါကတတိယ parameter_string_String ကိုသေချာအောင်လုပ်ပါ

  2. is_a () သည် အတန်း၏တိကျသောအကောင်အထည်ဖော်မှုအသေးစိတ်အချက်အလက်များမဟုတ်ဘဲအမျိုးအစားဆက်ဆံရေးကိုဆုံးဖြတ်သည်။ ထို့ကြောင့်အရာဝတ်ထုကိုလှောင်ပြောင်ခြင်းအားဖြင့်ဖန်တီးသည် ကို ဂရုမစိုက်ပါ,

အကျဉ်းချုပ်

အလိုအလျောက်စမ်းသပ်ခြင်းတွင်မုတ်ဆိတ်မွေးအရာဝတ်ထုအမျိုးအစားကိုစီရင်ခြင်းသည်ပြ problems နာများကိုပြ problems နာများနှင့်ပြ problems နာများကိုဖြေရှင်းရန်သေချာစေရန်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ is_a () က ဒီအောင်မြင်ရန်ပြောင်းလွယ်ပြင်လွယ်, တက်ကြွသောနည်းလမ်းကိုထောက်ပံ့ပေးသည်။ အထူးသဖြင့် 0 န်ဆောင်မှုကွန်တိန်နာများ, မှီခိုမှု, is_a () နှင့်အတူ () နှင့်ပြောင်ပြောင်တင်းတင်းပိုမိုယုံကြည်စိတ်ချမှုနှင့် ပတ်သက်. လှောင်ပြောင်ခြင်းနှင့်အပြုအမူကိုစစ်ဆေးရန်,