Sobes.tech
Middle

Miks kuivatestid on paremad kui Postmani kasutamine?

sobes.tech AI

Vastus AI-lt

Mok-testi võimaldab isoleerida testitavat komponenti, sõltumata väliste teenuste kättesaadavusest või töövõimest. See tagab testide stabiilsuse ja korduvuse, kiirendab teststsenaariumite täitmist ning lihtsustab otseseid vigu, mis on seotud testitava loogikaga.

Postman, isegi kasutades moko, testib väliste sõltuvuste koostööd päringu/vastuse tasemel, mitte ei sisesta moko otse testkoodi või komponendisse. See on vähem detailselt ja keerulisem automatiseerida CI/CD torujuhtmetes.

Mok-testi eelised Postmani ees automatiseeritud testimisel:

  • Isolatsioon: Testitakse ainult koodi, mitte välissüsteemide integratsiooni.
  • Stabiilsus: Testid ei kuku välja väliste teenuste probleemide tõttu.
  • Kiirus: Kiire täitmine ilma ootamiseta reaalseid teenuseid vastuseid ootama.
  • Detail: Võimalus mokida eraldi meetodeid või funktsioone koodis.
  • Automatiseerimine: Lihtne integreerida üksus- ja integratsioonitestidesse, mis käivitatakse automaatselt.
  • Külgjuhtumite testimine: Lihtne simuleerida erinevaid vastusscenarioid (vead, viivitused, mittestandardandmed).

Näide mok kasutamisest Java-s (Mockito):

// Loome mok sõltuvuse jaoks
ExternalService mockService = mock(ExternalService.class);

// Seadistame moki käitumise kindla meetodi kutsumisel
when(mockService.getData(anyString())).thenReturn("mokeeritud andmed");

// Testime komponenti mokiga
Processor processor = new Processor(mockService);
String result = processor.process("sisend");

// Kontrollime tulemust
assertEquals("töödeldud mokeeritud andmed", result);

// Kontrollime, kas mok meetod oli kutsutud
verify(mockService).getData("sisend");

Näide mok kasutamisest Pythonis (unittest.mock):

# mock_example.py

def get_data_from_external_service(id):
  # Välise teenuse väljakutse imiteerimine
  pass

def process_data(id):
  data = get_data_from_external_service(id)
  return f"töödeldud {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):
  # Moki tagastusarvu seadistamine
  mock_get_data.return_value = "mokeeritud andmed"

  # Testitava funktsiooni kutsumine, mis kasutab moki
  result = process_data("mõni_id")

  # Tulemust kontrollida
  self.assertEqual(result, "töödeldud mokeeritud andmed")

  # Kontrollida, kas moki kutsuti ootuspärase argumendiga
  mock_get_data.assert_called_once_with("mõni_id")

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

Postman sobib paremini API käsitsi testimiseks, uurimistöö testimiseks või demonstratsioonipäringute loomiseks. Automatiseeritud testimiseks CI/CD raames on kooditasemel mok-testimine eelistatum.