Prečo sú suché testy lepšie ako používanie Postmana?
sobes.tech AI
Odpoveď od AI
Mok-testovanie umožňuje izolovať testovaný komponent bez závislosti od dostupnosti alebo funkčnosti externých služieb. To zabezpečuje stabilitu a opakovateľnosť testov, zrýchľuje vykonávanie testovacích scenárov a zjednodušuje odhaľovanie chýb priamo súvisiacich s testovanou logikou.
Postman, aj pri použití mockov, testuje interakciu s externými závislosťami na úrovni požiadaviek/odpovedí, nie priamo vkladá moki do testovacieho kódu alebo samotného komponentu. To je menej granularne a zložitejšie pre automatizáciu v CI/CD pipeline.
Výhody mok-testovania oproti Postmanu pre automatizované testovanie:
- Izolácia: Testuje sa iba kód, nie integrácia s externými systémami.
- Stabilita: Testy nepadnú kvôli problémom s externými službami.
- Rýchlosť: Rýchle vykonávanie testov bez čakania na odpovede od reálnych služieb.
- Granularita: Možnosť mockovať jednotlivé metódy alebo funkcie v kóde.
- Automatizácia: Jednoducho sa integruje do jednotkových a integračných testov, ktoré sa spúšťajú automaticky.
- Testovanie krajnejších prípadov: Jednoduché napodobenie rôznych scenárov odpovedí závislostí (chyby, oneskorenia, nestandardné dáta).
Príklad použitia moku v Jave (Mockito):
// Vytvárame mok pre závislosť
ExternalService mockService = mock(ExternalService.class);
// Nastavujeme správanie moku pri volaní určitej metódy
when(mockService.getData(anyString())).thenReturn("mokované dáta");
// Testujeme komponentu s použitím moku
Processor processor = new Processor(mockService);
String result = processor.process("vstup");
// Kontrolujeme výsledok
assertEquals("spracované mokované dáta", result);
// Kontrolujeme, či bol volaný metóda moku
verify(mockService).getData("vstup");
Príklad použitia moku v Pythone (unittest.mock):
# mock_example.py
def get_data_from_external_service(id):
# Imitačný volanie externého servisu
pass
def process_data(id):
data = get_data_from_external_service(id)
return f"spracované {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):
# Nastavujeme návratovú hodnotu moku
mock_get_data.return_value = "mokované dáta"
# Voláme testovanú funkciu, ktorá používa moku
result = process_data("nejaké_id")
# Kontrolujeme výsledok
self.assertEqual(result, "spracované mokované dáta")
# Kontrolujeme, či bol moku volaný s očakávaným argumentom
mock_get_data.assert_called_once_with("nejaké_id")
if __name__ == '__main__':
unittest.main()
Postman je vhodnejší pre ručné testovanie API, výskumné testovanie alebo tvorbu demonstračných požiadaviek. Pre automatizované testovanie v rámci CI/CD je však preferované mok-testovanie na úrovni kódu.