Kodėl sausieji testai yra geresni nei Postman naudojimas?
sobes.tech AI
Atsakymas iš AI
Mok- testavimas leidžia izoliuoti testuojamą komponentą, nepriklausomai nuo išorinių paslaugų prieinamumo ar veikimo gebėjimo. Tai užtikrina testų stabilumą ir pakartojamumą, pagreitina testavimo scenarijų vykdymą ir palengvina tiesiogiai su testuojama logika susijusių klaidų nustatymą.
Postman, net naudodamas mokus, testuoja sąveiką su išorinėmis priklausomybėmis užklausos/atsakymo lygyje, o ne įterpia mokus tiesiogiai į testavimo kodą ar patį komponentą. Tai mažiau granulės ir sudėtingiau automatizuoti CI/CD pipeline'ose.
Mok- testavimo pranašumai prieš Postman automatiniame testavime:
- Izoliacija: Testuojamas tik kodas, ne išorinių sistemų integracija.
- Stabilumas: Testai nesugriūva dėl išorinių paslaugų problemų.
- Greitis: Greitas testų vykdymas be laukimo realių paslaugų atsakymų.
- Granularumas: Galimybė mokyti atskiras funkcijas ar metodus kode.
- Automatizacija: Lengvai integruojama į vienetinius ir integracinius testus, kurie vykdomi automatiškai.
- Galinių atvejų testavimas: Paprasta imituoti įvairius atsakymo scenarijus (klaidos, delsimas, nestandartiniai duomenys).
Pavyzdys naudojant moką Java (Mockito):
// Sukuriame moką priklausomybei
ExternalService mockService = mock(ExternalService.class);
// Nustatome moko elgseną tam tikro metodo iškvietimo metu
when(mockService.getData(anyString())).thenReturn("mokuoti duomenys");
// Testuojame komponentą, naudojant moką
Processor processor = new Processor(mockService);
String result = processor.process("įvestis");
// Patikriname rezultatą
assertEquals("apdoroti mokuoti duomenys", result);
// Patikriname, ar buvo iškviestas moko metodas
verify(mockService).getData("įvestis");
Python pavyzdys (unittest.mock):
# mock_example.py
def get_data_from_external_service(id):
# Imituoja išorinio serviso iškvietimą
pass
def process_data(id):
data = get_data_from_external_service(id)
return f"apdoroti {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):
# Nustatome moko grąžinamą reikšmę
mock_get_data.return_value = "mokuoti duomenys"
# Kviečiame testuojamą funkciją, kuri naudoja moką
result = process_data("koks_id")
# Patikriname rezultatą
self.assertEqual(result, "apdoroti mokuoti duomenys")
# Patikriname, ar mokas buvo iškviestas su tikėtinu argumentu
mock_get_data.assert_called_once_with("koks_id")
if __name__ == '__main__':
unittest.main()
Postman yra tinkamesnis rankiniam API testavimui, tyrimų testavimui ar demonstracinių užklausų kūrimui. Automatizuotam testavimui CI/CD aplinkoje, kodų lygio mok- testavimas yra pageidautinas.