Mock Object သည်ယူနစ်စစ်ဆေးခြင်းတွင်အသုံးဝင်သောစမ်းသပ်မှုတစ်ခုအနေဖြင့်အတန်းစစ်ဆေးမှုတွင်စမ်းသပ်မှုတစ်ခုပြုလုပ်နေသည်။ Mock Object မှတစ်ဆင့် developer များသည်အမှန်တကယ်မှီခိုမှုများကိုအတင်းအဓမ္မမှီခိုခြင်းမရှိဘဲလုပ်ဆောင်ချက်များကိုသို့မဟုတ်နည်းလမ်းများကိုစမ်းသပ်နိုင်သည့်နည်းလမ်းများကိုစစ်ဆေးနိုင်သည်။
PHP တွင်သင်သည် GetMockbuilder Method ကို သုံး. Mock Object ကိုဖန်တီးရန်သင်အသုံးပြုနိုင်သည်။ ဤနည်းလမ်းသည်အောက်ပါ parameters များကိုလက်ခံသည်။
// အာရုံဖော်ခြင်း MyInterface ထိသိျက်နှာ
$mock = $this->getMockBuilder(MyInterface::class)
->getMock();
// အာရုံဖော်ခြင်း MyClass 类并အာရုံဖော်ခြင်း其方法
$mock = $this->getMockBuilder(MyClass::class)
->setMethods(['myMethod'])
->getMock();
လှောင်ပြောင်သည့်အရာဝတ်ထုတစ်ခုကိုဖန်တီးပြီးသည့်နောက်တွင်သင်သည်၎င်း၏အပြုအမူကိုပြန်လည်ထည့်သွင်းခြင်းသို့မဟုတ်ချွင်းချက်ချခြင်းကဲ့သို့သောနည်းလမ်းနည်းလမ်းဖြင့် configure လုပ်နိုင်သည်။
// ကွက်ကွက်ကေျာင်း Mock ပြန်လာရန်အရာဝတ်ထု 'foo'
$mock->method('getMyMethod')
->willReturn('foo');
// ကွက်ကွက်ကေျာင်း Mock ခြွင်းချက်ပစ်ရန်အရာဝတ်ထု
$mock->method('myOtherMethod')
->willThrowException(new RuntimeException());
ဒီနေရာမှာယူနစ်စမ်းသပ်မှုမှာ Mock အရာဝတ်ထုကိုဘယ်လိုသုံးရမယ်ဆိုတာဖေါ်ပြတဲ့ဥပမာတစ်ခုပါ။ MyService Class ပေါ် မူတည်. myclass အတန်းတစ်ခုရှိသည်ဆိုပါစို့။
class MyClass
{
private $myService;
public function __construct(MyService $myService)
{
$this->myService = $myService;
}
public function doSomething(): string
{
return $this->myService->getData();
}
}
MyService Class တွင် string ကို "foo" ကိုပြန်ပို့ပေးသော GetData နည်းလမ်းပါရှိသည်။ MyClass :: dosomething method method ကိုစမ်းသပ်ရန်သင်သည် Mock Object ကိုသုံးနိုင်သည်။
class MyClassTest extends PHPUnit_Framework_TestCase
{
public function testDoSomething()
{
// ဖန်တီး MyService Mock ကန့်ကွက်
$mockService = $this->getMockBuilder(MyService::class)
->setMethods(['getData'])
->getMock();
// ကွက်ကွက်ကေျာင်း Mock ကန့်ကွက်ပြန်လာ "bar"
$mockService->method('getData')
->willReturn('bar');
// ဖန်တီး MyClass ဥပမာနှင့်ထိုးသွင်း Mock ကန့်ကွက်
$myClass = new MyClass($mockService);
// ကတရက် MyClass::doSomething ပြန်လာ "bar"
$this->assertEquals('bar', $myClass->doSomething());
}
}
ဤစမ်းသပ်မှုတွင်ကျွန်ုပ်တို့သည် Mock Order ကို Mock Onject ကိုဖန်တီးခဲ့ပြီး၎င်း၏ return value ကို "ဘား" သို့ထည့်သွင်းထားသည်။ ထို့နောက် Mock အရာဝတ်ထုကို MyClass ဥပမာတွင်ထိုးသွင်းပါ။ နောက်ဆုံးတွင် MyClass နှင့် MyService အကြားအပြန်အလှန်ဆက်သွယ်မှုသည်အခိုင်အမာပြောဆိုခြင်းမှတစ်ဆင့်မှန်ကန်ကြောင်းအတည်ပြုပါ။
Mock Objects များကိုအသုံးပြုခြင်းအားဖြင့် developer များသည်အမှန်တကယ် 0 န်ဆောင်မှုများသို့မဟုတ်ရှုပ်ထွေးသောပတ် 0 န်းကျင်များကိုမှီခိုခြင်းမရှိဘဲစည်းလုံးညီညွတ်မှုနှင့်စီးပွားရေးဆိုင်ရာယုတ္တိဗေဒကိုထိထိရောက်ရောက်စစ်ဆေးနိုင်သည်။