Sobes.tech
Middle

Γιατί τα ξηρά τεστ είναι καλύτερα από τη χρήση του Postman;

sobes.tech AI

Απάντηση από AI

Οι δοκιμές με mocks επιτρέπουν την απομόνωση του δοκιμαζόμενου συστατικού, χωρίς να εξαρτώνται από τη διαθεσιμότητα ή τη λειτουργία εξωτερικών υπηρεσιών. Αυτό διασφαλίζει σταθερότητα και επαναληψιμότητα των δοκιμών, επιταχύνει την εκτέλεση των σεναρίων δοκιμών και απλοποιεί την ανίχνευση σφαλμάτων που σχετίζονται άμεσα με τη δοκιμαζόμενη λογική.

Το Postman, ακόμη και χρησιμοποιώντας mocks, δοκιμάζει την αλληλεπίδραση με εξωτερικές εξαρτήσεις σε επίπεδο αιτήματος/απάντησης και δεν ενσωματώνει mocks απευθείας στον κώδικα δοκιμής ή στο ίδιο το συστατικό. Αυτό είναι λιγότερο granular και πιο δύσκολο στην αυτοματοποίηση σε pipelines CI/CD.

Τα πλεονεκτήματα των δοκιμών με mocks σε σύγκριση με το Postman για αυτοματοποιημένες δοκιμές:

  • Απομόνωση: Δοκιμάζεται μόνο ο κώδικας, όχι η ενσωμάτωση με εξωτερικά συστήματα.
  • Σταθερότητα: Οι δοκιμές δεν αποτυγχάνουν λόγω προβλημάτων με εξωτερικές υπηρεσίες.
  • Ταχύτητα: Γρήγορη εκτέλεση των δοκιμών χωρίς να περιμένουν απαντήσεις από πραγματικές υπηρεσίες.
  • Γραμμικότητα: Δυνατότητα mockαρίσματος μεμονωμένων μεθόδων ή λειτουργιών στον κώδικα.
  • Αυτοματοποίηση: Εύκολη ενσωμάτωση σε αυτόματες δοκιμές μονάδας και ολοκλήρωσης.
  • Δοκιμή ακραίων περιπτώσεων: Ευκολία στην προσομοίωση διαφόρων σεναρίων απαντήσεων εξαρτήσεων (σφάλματα, καθυστερήσεις, μη τυπικά δεδομένα).

Παράδειγμα χρήσης mock σε Java (Mockito):

// Δημιουργία mock για την εξάρτηση
ExternalService mockService = mock(ExternalService.class);

// Ρύθμιση συμπεριφοράς mock κατά την κλήση συγκεκριμένης μεθόδου
when(mockService.getData(anyString())).thenReturn("mocked data");

// Δοκιμή του συστατικού χρησιμοποιώντας το mock
Processor processor = new Processor(mockService);
String result = processor.process("εισαγωγή");

// Έλεγχος αποτελέσματος
assertEquals("processed mocked data", result);

// Έλεγχος αν η μέθοδος του mock καλείται
verify(mockService).getData("εισαγωγή");

Παράδειγμα χρήσης mock σε 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"processed {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
  mock_get_data.return_value = "mocked data"

  # Κλήση της δοκιμαζόμενης συνάρτησης που χρησιμοποιεί το mock
  result = process_data("some_id")

  # Έλεγχος αποτελέσματος
  self.assertEqual(result, "processed mocked data")

  # Έλεγχος αν το mock καλείται με το αναμενόμενο όρισμα
  mock_get_data.assert_called_once_with("some_id")

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

Το Postman είναι πιο κατάλληλο για χειροκίνητο έλεγχο API, εξερευνητικό testing ή δημιουργία επιδεικτικών αιτημάτων. Για αυτοματοποιημένο testing στο πλαίσιο CI/CD, προτιμώνται οι δοκιμές με mocks σε επίπεδο κώδικα.