Ինչու՞ չոր թեստերը ավելի լավ են, քան Postman-ի օգտագործումը։
sobes.tech AI
Պատասխան AI-ից
Մոկ-տեստավորումը հնարավորություն է տալիս առանձնացնել ստուգվող կոմպոնենտը՝ անկախ արտաքին ծառայությունների հասանելիությունից կամ աշխատանքային կարողությունից: Սա ապահովում է ստաբիլություն և կրկնվողություն, արագացնում է փորձարկման սցենարների կատարմանը և հեշտացնում է սխալների հայտնաբերում, որոնք անմիջապես կապված են ստուգվող տրամաբանության հետ:
Postman-ը, նույնիսկ օգտագործելով մոկեր, ստուգում է արտաքին կախվածությունների փոխազդեցությունը հարցում/պատասխան մակարդակով, ոչ թե մոկերը անմիջապես ներդնում է փորձարկման կոդում կամ ինքնին կոմպոնենտում: Սա ավելի քիչ մանրամասն է և ավելի բարդ է ավտոմատացման համար CI/CD շղթաներում:
Առավելություններ մոկ-տեստավորման՝ Postman-ի նկատմամբ ավտոմատացված փորձարկման համար՝
- Ազատություն: Ստուգվում է միայն կոդը, ոչ թե արտաքին համակարգերի ինտեգրացիան:
- Տևականություն: Փորձարկումները չեն տուժում արտաքին ծառայությունների խնդիրների պատճառով:
- Արագություն: Արագ կատարման փորձարկումներ՝ առանց սպասելու իրական ծառայություններից պատասխանների:
- Մանրամասնություն: Հնարավորություն է մոկել առանձին մեթոդներ կամ ֆունկցիաներ կոդում:
- Ավтоматացում: Լավ է ինտեգրվում միավորական և ինտեգրացիոն փորձարկումների մեջ, որոնք ավտոմատ կերպով գործարկվում են:
- Կատարման եզրային դեպքերի փորձարկում: Հեշտ է սիմուլացնել տարբեր պատասխանային սցենարներ՝ սխալներ, ուշացումներ, ոչ ստանդարտ տվյալներ:
Օրինակ՝ Java-ում մոկ օգտագործելու համար (Mockito)
// Ստեղծում ենք մոկ կախվածության համար
ExternalService mockService = mock(ExternalService.class);
// Կարգավորում ենք մոկի վարքը որոշ մեթոդի կանչի դեպքում
when(mockService.getData(anyString())).thenReturn("մոկացված տվյալներ");
// Ստուգում ենք կոմպոնենտը՝ օգտագործելով մոկը
Processor processor = new Processor(mockService);
String result = processor.process("մուտք");
// Ստուգում ենք արդյունքը
assertEquals("վերամշակված մոկացված տվյալներ", result);
// Ստուգում ենք, արդյոք մոկի մեթոդը կանչվել է
verify(mockService).getData("մուտք");
Python-ում մոկի օգտագործման օրինակ (unittest.mock)
# mock_example.py
def get_data_from_external_service(id):
# Արտաքին ծառայության կանչի իմիտացիա
pass
def process_data(id):
data = get_data_from_external_service(id)
return f"վերամշակված {data}"
# test_mock_example.py
import unittest
from unittest.mock import patch
from . mock_example import process_data
class TestProcessData(unittest.TestCase):
@patch('mock_example.get_data_from_external_service')
def test_process_data_with_mock(self, mock_get_data):
# Մոկի վերադարձվող արժեքի կարգավորում
mock_get_data.return_value = "մոկացված տվյալներ"
# Տեղեկատվության կանչ՝ օգտագործելով մոկը
result = process_data("մեկ_համար")
# Արժեքի ստուգում
self.assertEqual(result, "վերամշակված մոկացված տվյալներ")
# Մոկի կանչի ստուգում՝ սպասվող արգումենտով
mock_get_data.assert_called_once_with("մեկ_համար")
if __name__ == '__main__':
unittest.main()
Postman-ը ավելի հարմար է API-ի ձեռքով փորձարկման, հետազոտական փորձարկումների կամ ցուցադրական հարցումների համար: Ավտոմատացված փորձարկումների համար՝ CI/CD շրջանակներում, կոդի մակարդակի մոկ-տեստավորումը նախընտրելի է: