Sobes.tech
Middle

Zašto su suvi testovi bolji od korišćenja Postmana?

sobes.tech АИ

Одговор од АИ

Мок-тестирање омогућава изолацију тестиране компоненте, без зависности од доступности или радне способности спољашњих сервиса. Ово обезбеђује стабилност и понављање тестова, убрзава извршавање тест сценарија и поједностављује откривање грешака директно везаних за тестиралу логику.

Postman, чак и користећи мокове, тестира интеракцију са спољашњим зависностима на нивоу захтева/одговора, а не убацује мокове директно у тест код или саму компоненту. Ово је мање грануларно и сложеније за аутоматизацију у CI/CD pipeline-има.

Предности мок-тестирања у односу на Postman за аутоматизовано тестирање:

  • Изолација: Тестира се само код, а не интеграција са спољашњим системима.
  • Стабилност: Тестови не падају због проблема са спољашњим сервисима.
  • Брзина: Брзо извршавање тестова без чекања на одговоре од реалних сервиса.
  • Грануларност: Могућност моковања појединачних метода или функција у коду.
  • Аутоматизација: Лако се интегрише у јединичне и интеграционе тестове који се аутоматски покрећу.
  • Тестирање крајњих случајева: Лако имитирање различитих сценарија одговора зависности (грешке, кашњења, нестандардни подаци).

Пример коришћења мока у Јави (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("некој_id")

  # Провера резултата
  self.assertEqual(result, "обрађени мокирани подаци")

  # Провера да ли је мок позван са очекиваним аргументом
  mock_get_data.assert_called_once_with("некој_id")

if __name__ == '__main__':
  unittest.main()

Postman је погоднији за ручно тестирање API-ја, истраживачко тестирање или креирање демонстрационих захтева. За аутоматизовано тестирање у оквиру CI/CD, мок тестирање на нивоу кода је пожељније.