လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ယူနစ်စမ်းသပ်မှုများတွင်အချိန် time_nanosleep နှောင့်နှေးမှုကိုဘယ်လိုလှောင်ပြောင်မလဲ

ယူနစ်စမ်းသပ်မှုများတွင်အချိန် time_nanosleep နှောင့်နှေးမှုကိုဘယ်လိုလှောင်ပြောင်မလဲ

gitbox 2025-05-26

PHP ယူနစ်စစ်ဆေးခြင်းကိုပြုလုပ်သောအခါ code နှောင့်နှေးခြင်း ( time_nanosleep ကဲ့သို့သော) သည်စမ်းသပ်မှုများကိုနှေးကွေးစေပြီး CI / CD လုပ်ငန်းစဉ်များ၏ကွပ်မျက်မှုအချိန်ကိုနှေးကွေးစေသည်။ ထို့အပြင်စမ်းသပ်မှုကိုယ်နှိုက်သည်အချိန်မှန်အပေါ်မှီခိုနေရပြီးစာမေးပွဲ၏ကြိုတင်ခန့်မှန်းမှုနှင့်တည်ငြိမ်မှုကိုလျှော့ချနိုင်သည်။ ထိရောက်မှုကိုတိုးတက်စေရန်နှင့်စမ်းသပ်ခြင်း၏သန့်ရှင်းစင်ကြယ်မှုကိုထိန်းသိမ်းရန်အတွက်ကျွန်ုပ်တို့သည်များသောအားဖြင့် "လှောင်ပြောင်ခြင်း" ကဲ့သို့သောနှောင့်နှေးလုပ်ဆောင်မှုများလိုအပ်သည်။

ဤဆောင်းပါးသည် PHP ရှိ PHP ရှိယူနစ်စမ်းသပ်မှုများ၌ PHP စမ်းသပ်မှုများရှိသည့်အပြုအမူကိုမည်သို့တုပရမည်ကိုရှင်းပြပါမည်။

နောက်ခံကုဒ်ဥပမာ

ကျွန်ုပ်တို့တွင် 0 န်ဆောင်မှုအတန်းတစ်ခုမြင်တွေ့ရပြီးဤအတန်းရှိနည်းလမ်းများသည်တိုတောင်းသောစစ်ဆင်ရေးများကိုလုပ်ဆောင်ရန် Time_Nanosleep ကို အသုံးပြုလိမ့်မည်။

 class TaskRunner
{
    public function runWithDelay(): string
    {
        time_nanosleep(0, 500000000); // နေှာင့်နေှး 0.5 စက်ဏန့်
        return 'done';
    }
}

အကယ်. ကျွန်ုပ်တို့သည်နည်းလမ်းကိုတိုက်ရိုက်စစ်ဆေးပါကစမ်းသပ်မှုသည်စက္ကန့်ဝက်တစ်ဝက်အတွက်ခေတ္တရပ်တန့်သွားလိမ့်မည်။ ကျွန်ုပ်တို့သည် "အစားထိုး" သို့မဟုတ် "ပြန်လည်ပြုပြင်" ရန်အချိန်ရှာရန်လိုအပ်သည်

namespace function များကို သုံး. ပြန်လည်ရေးရန်သိကောင်းစရာများ

PHP တွင် built-in function ကိုလှောင်ပြောင်လုပ်ဆောင်မှုမရှိပါ။ PHP ၏လုပ်ဆောင်မှုရှာဖွေရေးယန္တရားကိုသုံးနိုင်သည်။

အဆင့် 1 - ကုဒ်ကို namespace ထဲထည့်ပါ

Gitpox \ Runtime ကဲ့သို့သော Namespace သို့စီးပွားရေးကုဒ်များကို encapsatate:

 namespace Gitbox\Runtime;

function time_nanosleep(int $seconds, int $nanoseconds)
{
    // မူရင်းအပြုအမူ:ကမ္ဘာလုံးဆိုင်ရာလုပ်ဆောင်ချက်များကိုခေါ်ဆိုခြင်း
    return \time_nanosleep($seconds, $nanoseconds);
}

class TaskRunner
{
    public function runWithDelay(): string
    {
        time_nanosleep(0, 500000000);
        return 'done';
    }
}

အခုတော့ taskrunner သည် Gitbox \ Runtime \ timanosleep ကို အသုံးပြုနေသည်။

အဆင့် 2 - စမ်းသပ်မှုများတွင် function အပြုအမူကိုပြန်လည်ရေးရန်

စမ်းသပ်ဖိုင်တွင်ကျွန်ုပ်တို့သည်တူညီသော namespace အောက်တွင်ပြောင်လှောင်ထားသော time_nanosleep function ကိုသတ်မှတ်သည်။

 namespace Gitbox\Runtime;

function time_nanosleep(int $seconds, int $nanoseconds)
{
    // 模拟နေှာင့်နေှး:ဘာမှမလုပ်ပါနဲ့
    return true;
}

ထိုအခါကျွန်ုပ်တို့သည်ပုံမှန်အတိုင်းစမ်းသပ်နိုင်သည်။

 use Gitbox\Runtime\TaskRunner;
use PHPUnit\Framework\TestCase;

class TaskRunnerTest extends TestCase
{
    public function testRunWithDelay()
    {
        $runner = new TaskRunner();
        $result = $runner->runWithDelay();

        $this->assertEquals('done', $result);
    }
}

ကျွန်ုပ်တို့သည် Time_NanOSeEp ကို စမ်းသပ်ပတ်ဝန်းကျင်တွင်ကျော်လွှားနိုင်သည့်အတွက်စမ်းသပ်မှုတွင်နှောင့်နှေးမှုမရှိပါ။

မှီခိုသောဆေးထိုးခြင်း (optional outhancement method) ကိုသုံးပါ။

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

 interface SleeperInterface
{
    public function sleep(): void;
}

class RealSleeper implements SleeperInterface
{
    public function sleep(): void
    {
        time_nanosleep(0, 500000000);
    }
}

class TaskRunner
{
    private SleeperInterface $sleeper;

    public function __construct(SleeperInterface $sleeper)
    {
        $this->sleeper = $sleeper;
    }

    public function runWithDelay(): string
    {
        $this->sleeper->sleep();
        return 'done';
    }
}

စမ်းသပ်မှုတွင်ကျွန်ုပ်တို့သည်လှောင်ပြောင်သင်တန်းများကိုသုံးနိုင်သည်။

 class FakeSleeper implements SleeperInterface
{
    public function sleep(): void
    {
        // မည်သည့်အရေးယူဆောင်ရွက်မှုကိုမလုပ်ဆောင်ပါနှင့်
    }
}

မည်သို့အသုံးပြုရမည်နည်း

 $sleeper = new FakeSleeper();
$runner = new \Gitbox\Runtime\TaskRunner($sleeper);
$this->assertEquals('done', $runner->runWithDelay());

အကျဉ်းချုပ်

PHP တွင်အချိန်ကိုမှီခိုသည့်လုပ်ဆောင်မှုများကိုစမ်းသပ်ရန်အထိရောက်ဆုံးနည်းလမ်းမှာ function ကို namespace မှတဆင့်သို့မဟုတ်မှီခိုဆေးထိုးခြင်းဖြင့်ပြန်လည်သတ်မှတ်ခြင်းအားဖြင့်ဖြစ်သည်။ Time_nanosleep ကဲ့သို့သောကမ္ဘာလုံးဆိုင်ရာလုပ်ဆောင်ချက်များအတွက် Namespace Rewriting နည်းစနစ်များကိုအသုံးပြုရန်နှင့်စီမံကိန်း၏ထိန်းချုပ်မှုဆိုင်ရာနယ်နိမိတ်အတွင်းစမ်းသပ်ဆင်ခြင်ခြင်းကိုထိန်းသိမ်းထားသည်။

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

ဤနည်းလမ်းများမှတစ်ဆင့်စစ်ဆေးမှုတွင်အချိန်မှန်ကုန်ကျစရိတ်များမမိတ်မဖွဲ့ဘဲအချိန်မှန်ကုန်ကျစရိတ်များနှင့်စမ်းသပ်ခြင်းထိရောက်မှုနှင့်တည်ငြိမ်မှုကိုတိုးတက်အောင်ပြုလုပ်နိုင်သည်။

ပိုမိုသက်ဆိုင်သည့်လက်တွေ့ကျသောဥပမာများပိုမိုများပြားရန်အတွက် https://gitbox.net သို့ဝင်ရောက်ကြည့်ရှုပါ။