Sobes.tech
Middle

Ինչու՞ չոր թեստերը ավելի լավ են, քան 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 շրջանակներում, կոդի մակարդակի մոկ-տեստավորումը նախընտրելի է: