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, мок тестирање на нивоу кода је пожељније.