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';
}
}
အကယ်. ကျွန်ုပ်တို့သည်နည်းလမ်းကိုတိုက်ရိုက်စစ်ဆေးပါကစမ်းသပ်မှုသည်စက္ကန့်ဝက်တစ်ဝက်အတွက်ခေတ္တရပ်တန့်သွားလိမ့်မည်။ ကျွန်ုပ်တို့သည် "အစားထိုး" သို့မဟုတ် "ပြန်လည်ပြုပြင်" ရန်အချိန်ရှာရန်လိုအပ်သည် ။
PHP တွင် built-in function ကိုလှောင်ပြောင်လုပ်ဆောင်မှုမရှိပါ။ PHP ၏လုပ်ဆောင်မှုရှာဖွေရေးယန္တရားကိုသုံးနိုင်သည်။
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 ကို အသုံးပြုနေသည်။
စမ်းသပ်ဖိုင်တွင်ကျွန်ုပ်တို့သည်တူညီသော 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 ကို စမ်းသပ်ပတ်ဝန်းကျင်တွင်ကျော်လွှားနိုင်သည့်အတွက်စမ်းသပ်မှုတွင်နှောင့်နှေးမှုမရှိပါ။
နောက်ထပ်အရာဝတ်ထု ဦး တည်သည့်နည်းလမ်းမှာနှောင့်နှေးသောလုပ်ငန်းများကိုအတန်းတစ်ခုထဲသို့ထည့်သွင်းရန်ဖြစ်သည်။ အလုပ်ကြီးကြပ်သူအဖြစ်မှီခိုခြင်းဖြင့်ကျွန်ုပ်တို့သည်အမျိုးမျိုးသောအပြုအမူများကိုပိုမိုလွယ်ကူစွာတုပကာရေရှည်ပိတ်ဆို့ခြင်းစသည်တို့ကိုပိုမိုလွယ်ကူစွာတုပနိုင်သည်။
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 သို့ဝင်ရောက်ကြည့်ရှုပါ။