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-ების ხელით ტესტირებისთვის, კვლევითი ტესტირებისა და დემონსტრაციის მოთხოვნების შესაქმნელად. ავტომატიზებული ტესტებისთვის, კოდის დონეზე მოკ-ტესტირება უფრო სასურველია.