Кіріспе
Нақты объектіні шала-қуатты көшірмедей жасайтын бағдарламалық нысан.
Модельдік объект – өндірістік объектінің мүмкіндіктерін шектеулі түрде имитациялайтын нысан. Бағдарламашы бағдарламалық жасақтаманы тестілеу үшін оны тесттік дубль ретінде қолдануы мүмкін. Модельдік объект жалпы мақсаттағы бағдарламалауда да қолданылуы мүмкін.
Салыстырмалылық
Макеттік объект бағдарламалық тестілеушіге автомобиль конструкторының көлік соқтығысында адамды симуляциялау үшін соққы сынағы манекенін пайдалануы сияқты пайдалы болуы мүмкін.
Техникалық мәліметтер
Мок-объектілер олар еліктейтін нақты объектілермен бірдей интерфейске ие, бұл клиент-объектіге нақты объектіні немесе мок-объектіні пайдаланатынын білмей қалуға мүмкіндік береді. Көптеген қолданыстағы мок-объектілер шеңберлері бағдарламашыға мок-объектіде қандай әдістер шақырылатынын, қандай ретпен, оларға қандай параметрлер жіберілетінін және қандай мәндер қайтарылатынын анықтауға мүмкіндік береді. Осылайша, желілік сокет сияқты күрделі объектінің әрекетін мок-объектімен еліктеуге болады, бұл бағдарламашыға сыналып жатқан объектінің осындай мок-объектілердің болуы мүмкін әртүрлі күйлерге тиісінше жауап беретінін анықтауға көмектеседі.
Мока, жалған және ұсақ-түйек
Мока, фейк және шұңқырдың анықтамалары әдебиеттерде біркелкі келмейді. Бірақ, олардың барлығы бірдей интерфейсті ұсына отырып, сынақ ортасында өндірістік объектіні көрсетеді. Атауына қарамастан, ең қарапайым түрі алдын ала дайындалған жауаптарды қайтарады (әдіс шұңқыры сияқты), ал ең күрделі түрі өндірістік объектінің толық логикасын имитациялайды. Мұндай сынақ объектісі әр шақырудың контекстін тексеру үшін нақтылаулар (assertions) қамтуы мүмкін. Мысалы, мока объектісі әдістердің шақырылу ретін немесе әдіс шақырулары арасындағы деректердің дұрыстығын нақтылай алады. "Бірліктерді сынау өнері" кітабында моктар – объектімен өзара әрекеттесу болды ма, жоқ па, соны тексеру арқылы сынақтың сәтті немесе сәтсіз аяқталғанын анықтауға көмектесетін жалған объекті деп сипаттаған. Ал қалғаны – шұңқыр деп аталады. Сол кітапта фейктер – нағыз емес нәрселер, олар қолданылуына байланысты шұңқыр немесе моктар болуы мүмкін.
Күтулерді белгілеу
Авторизациялық жүйе бөлігін мазақтау мысалын қарастырайық. Мазақтаушы объект нақты авторизациялық кластағыдай, isUserAllowed(task : Task) : boolean әдісін іске асырады. Егер ол нақты класта жоқ isAllowed: boolean қасиетін де ашса, көптеген артықшылықтар пайда болады. Бұл тест кодына келесі шақыруда пайдаланушыға рұқсат беріледі немесе берілмейді деген күтуді оңай орнатуға және соның салдарынан жүйенің қалған бөлігінің мінез-құлқын екі жағдайда да оңай сынауға мүмкіндік береді. Сол сияқты, мазақтау параметрлері кейінгі шақырулардың кіші жүйенің қателік шығаруына, жауап бермей тоқтауына немесе null қайтаруына себеп болуын қамтамасыз ете алады. Осылайша, артқы жүйелердегі нақты ақаулық жағдайларымен қатар, олардан күтілетін жауаптарға да клиенттік мінез-құлқыны әзірлеуге және сынауға болады. Мұндай қарапайым және икемді мазақтау жүйесі болмаса, осы жағдайлардың әрқайсысын сынау оларға тиісті көңіл бөлу үшін тым қиын болуы мүмкін.
Журналдар тізбегін жазу
Модельдік деректер қорының save (адам: Адам) әдісінде көп емес (немесе тіпті ешқандай) іске асыру коды болмауы мүмкін. Ол сақтау үшін берілген Адам объектісінің бар екенін және мүмкін жарамдылығын тексеруі мүмкін (жоғарыдағы «қалпы» және «модельдеу» туралы талқылауды қараңыз), бірақ одан өзге ешқандай іске асыру болмауы мүмкін. Бұл – пайдалы мүмкіндікті жіберіп алу. Модельдеу әдісі ашық журналға жазба қосуы мүмкін. Жазбада тек «Адам сақталды» деген сөз болуы жеткілікті, немесе ол адам объектісінің аты немесе идентификаторы сияқты кейбір деректерін қамтуы мүмкін. Егер тест коды әртүрлі операциялар кезінде модельдеу деректер қорымен жұмыс іскергеннен кейін журналдың соңғы мазмұнын тексерсе, онда әрбір жағдайда деректер базасына күтілген санда сақтау операциясы жасалғанын растауға болады. Бұл көрінбейтін өнімділіктің төмендеуіне себеп болатын қателерді табуға көмектеседі, мысалы, егер дамытушы деректерді жоғалтудан қорқып, бір рет сақтау жеткілікті болған жағдайда, сақтау үшін бірнеше рет шақыруды кодтаған болса.
Сынақпен жүргізілетін дамуда пайдалану
Тесттік даму әдісімен (TDD) жұмыс істейтін бағдарламашылар бағдарлама жазу кезінде мок-объектілерді пайдаланады. Мок-объектілер күрделірек нақты объектілердің интерфейс талаптарына сай келіп, олардың орнында тұрады; осылайша бағдарламашылар күрделі негізгі немесе өзара әрекеттесетін сыныптарды шақырмастан бір бөлімде функционалды жазып, бірлікте сынауға мүмкіндік алады.