Sobes.tech
Middle

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.