stop жана mock ортосундагы айырма эмнеде?
sobes.tech AI
AIден жооп
stop — бул тестти түздөн-түз көз карандычылыктардан (мисалы, сырткы API-лерге кайрылуулар, маалыматтар базалары) ажыратуу техникасы, аны тесттик тосмолорго алмаштыруу аркылуу жүргүзөт. Ал сырткы көз карандычылыктардын жүрүм-турумун көзөмөлдөөгө жана тесттердин кайталоо мүмкүнчүлүгүн камсыз кылууга колдонулат.
mock ("mock object" деп да аталат) — бул тесттик тосмо түрү, ал гана эмес, реалдуу объектти алмаштырып коюп, тесттелүүчү код менен анын өз ара аракеттенүүсүн текшерүүгө мүмкүндүк берет. Моктор аркылуу метод чакыруулары, аргументтери жана чакыруулардын саны текшерилет.
Демек, stop — жалпы түшүнүк, ал изоляцияны сүрөттөйт, ал эми mock — анын жетишүүсү үчүн конкреттүү инструмент, ал өз ара аракеттенүүнү текшерүүгө мүмкүнчүлүк берет.
Мисал катары PHPUnit жана Mockery колдонуу:
<?php
use PHPUnit\Framework\TestCase;
use Mockery;
// Внешняя зависимость колдонгон класс
class UserProcessor
{
private $apiClient;
public function __construct(ApiClient $apiClient)
{
$this->apiClient = $apiClient;
}
public function processUserData(int $userId): bool
{
$data = $this->apiClient->fetchUserData($userId);
if ($data && $data['status'] === 'active') {
// Актив колдонуучуну иштетүү логикасы
return true;
}
return false;
}
}
// Мок колдонуп тест өткөрүү мисалы
class UserProcessorTest extends TestCase
{
public function testProcessUserDataWithActiveUser()
{
// ApiClient үчүн мок түзүү
$apiClientMock = Mockery::mock(ApiClient::class);
// Мок үчүн күтүлгөн жүрүм-турумду орнотуу
// `fetchUserData` методун 123 аргумент менен чакыруу күтүлүүдө
$apiClientMock->shouldReceive('fetchUserData')
->with(123)
->andReturn(['status' => 'active', 'data' => '...']) // Мок бул маалыматтарды кайтарат
->once(); // Метод бир гана чакырылат деп күтүлүүдө
// Мок менен тесттелүүчү объект түзүү
$userProcessor = new UserProcessor($apiClientMock);
// Тесттелүүчү методду иштетүү
$result = $userProcessor->processUserData(123);
// Натыйжаны текшерүү
$this->assertTrue($result);
// Моктун бардык күтүүлөрү аткарылганын текшерүү
Mockery::close();
}
}
Бул мисалда ApiClient "мок" менен алмаштырылган. Биз реалдуу API чакыруусун токтотуп, fetchUserData(123) чакырганда белгилүү бир маалыматтарды кайтаруу үчүн мокту орноттук. Ошондой эле, бул метод туура аргументтер менен жана бир гана жолу чакырылганын текшеребиз. Бул негизги айырмачылык: мок өз ара аракеттенүүнү текшерүүгө мүмкүндүк берет.