Μονάδα έναντι δοκιμών ενσωμάτωσης
1) Γιατί γίνεται διάκριση μεταξύ των τύπων δοκιμών
Η σωστή κοκκοποίηση των δοκιμών καθιστά την ανάπτυξη προβλέψιμη: Η λογική της μονάδας αλιεύει ελαττώματα γρήγορα και φθηνά. Η ενσωμάτωση ελέγχει δέσμες ενοτήτων, πραγματικές μεταφορές και "κόλλα. "Μαζί, μειώνουν την οπισθοδρόμηση και επιταχύνουν τις απελευθερώσεις.
2) Ορισμοί και όρια
Δοκιμή μονάδας
Δοκιμάζει μια μικρή μονάδα συμπεριφοράς (συνάρτηση, κλάση, περίπτωση χρήσης) μεμονωμένα.
Οι εξωτερικές εξαρτήσεις αντικαθίστανται (mock/stub/fake).
Γρήγορη (ms-δεκάδες ms), ντετερμινιστική.
Δοκιμή ενσωμάτωσης
Ελέγχει την αλληλεπίδραση διαφόρων πραγματικών συστατικών: βάση δεδομένων, μεσίτης (Kafka/RabbitMQ), HTTP/gRPC, σύστημα αρχείων, κρύπτη.
Ελάχιστα mocs, πραγματικά πρωτόκολλα.
Πιο αργή (εκατοντάδες ms-δευτερόλεπτα), πιο ακριβή σε υποστήριξη.
3) Πυραμίδα δοκιμής (όχι κέρας πάγου)
Ίδρυμα: Μονάδα (70-80% σε αριθμό) - φθηνή, γρήγορη.
Μεσαίο επίπεδο: Ολοκλήρωση/Συνιστώσα (15-25%) - κρίσιμες διαδρομές και συμβάσεις.
Επάνω: E2E/UX/Exploratory (5-10%) - αρκετά ελάχιστα.
Στις πλευρές: Στατική ανάλυση/Lint/Έλεγχος τύπου και δοκιμή μετάλλαξης ως ενισχυτές ποιότητας.
4) Τι να δώσετε στη Μονάδα και τι στην Ένταξη
5) Δεδομένα και διορθώσεις
Μονάδα
Inline fictions/builders (μέθοδοι εργοστασίου).
Επιτραπέζιες δοκιμές για οριακές τιμές.
Προσέγγιση βάσει περιουσιακών στοιχείων για τις αναλλοίωτες (π.χ. «άθροισμα χρεώσεων = άθροισμα πιστώσεων»).
Ενσωμάτωση
Ερμητικό περιβάλλον: Testcontainers/Docker Compose raise 'postgres + redis + kafka + wiremock'.
Αρχικός σπόρος στη βάση δεδομένων/κρυφή μνήμη και καθαρισμός μετά (συναλλαγή/ανατροπή, κατακερματισμός).
Τα ρολόγια/χρονοδιακόπτες είναι πλαστά (ελεγχόμενα), αλλιώς flacks.
6) Εργαλεία και πρότυπα
Mocks/Stubs/Fakes/Κατάσκοποι:- Το stub είναι μια σταθερή απάντηση (φτηνή).
- Mock - ελέγξτε τις αλληλεπιδράσεις/τον αριθμό των κλήσεων.
- Το ψεύτικο είναι μια απλοποιημένη εφαρμογή (για παράδειγμα, In-Memory Repo).
- Δοκιμές συμβάσεων (CDC): Σύμφωνο/Swagger - καθορίστε τις προσδοκίες των πελατών και ελέγξτε τον πάροχο.
- WireMock/MockServer - αποκόμματα HTTP για υπηρεσίες τρίτων.
- Οι testcontainers είναι ζωντανοί DB/μεσίτες τοπικά και σε CI χωρίς «ζωολογικό κήπο».
7) Παραδείγματα
7. 1 Μονάδα: Idempotence πληρωμής (ψευδοκώδικας)
python def test_idempotent_create_payment_returns_same_id():
repo = InMemoryPayments()
service = Payments(repo)
first = service. create(amount=100, key="abc")
second = service. create(amount=100, key="abc")
assert first. id == second. id assert repo. count() == 1
7. 2 Ενσωμάτωση: Υπογραφή Webhook (HMAC) + Επανάληψη
bash docker-compose: app + redis + wiremock (PSP)
docker compose -f docker-compose. test. yml up -d pytest -m "integration and webhook" -q
Δοκιμή:
- Ο WireMock δίνει μια εκδήλωση με ένα 'X-Timestamp' και μια υπογραφή.
- Η εφαρμογή ελέγχει HMAC, αποπάγωση με 'event _ id', επανάληψη μετά από 5 δευτερόλεπτα δεν δημιουργεί διπλό.
- Ελέγχουμε το «200» και ότι υπάρχει μόνο μία καταχώρηση.
7. 3 CDC: Σύμβαση πελάτη με τον πάροχο
Ο πελάτης δημιουργεί ένα σύμφωνο (αναμονή: 'POST/v1/payout' → '201' με ένα διάγραμμα).
Ο πάροχος ΚΚΠ διενεργεί την επαλήθευση της σύμβασης στη θέση του.
8) Ταχύτητα, παραλληλισμός, νιφάδες
οι μονάδες πρέπει να λειτουργούν <100 ms ανά δοκιμή· πακέτο - δευτερόλεπτα.
Ολοκλήρωση - παράλληλα με εμπορευματοκιβώτια/λιμένες. χρήση των μεταναστεύσεων εκκίνησης.
- ελεγχόμενος χρόνος (ψεύτικο ρολόι),
- προσδοκίες «από ρητό γεγονός», όχι «ύπνο»,
- σταθερά κατώτατα όρια (ρετράι με προσδιορισμό της δοκιμής νευρικότητας).
9) Μετρήσεις ποιότητας
Κάλυψη (γραμμές/κλάδοι): χρήσιμη για την παρατήρηση της τάσης, αλλά όχι του στόχου.
Δοκιμή μετάλλαξης (PIT/Mutmut): Δείχνει αν οι δοκιμές «σκοτώνουν» ψευδείς αλλαγές - η πραγματική δύναμη των δολοφόνων.
Διάρκεια της δοκιμής και αστραφτερός ρυθμός: προειδοποιήσεις κατά την ανάπτυξη.
Περιορισμός ελαττώματος: το ποσοστό των σφαλμάτων που αναχαιτίστηκαν πριν από την παραγωγή.
10) Ενσωμάτωση σε CI/CD
Θέσεις εργασίας: ενοποίηση μονάδας e2e (ανεμιστήρας κατά υπηρεσία).
Μνήμη εξάρτησης, παράλληλοι πίνακες ανά βάση δεδομένων/γλώσσα/έκδοση.
Εκθέσεις: JUnit/Allure + τεχνουργήματα καταγραφής εμπορευματοκιβωτίων (για σταγόνες).
Πύλη: «πράσινη μονάδα + κρίσιμη ολοκλήρωση» - συνθήκη συγχώνευσης· e2e - τη νύχτα.
yaml strategy:
matrix:
db: [postgres14, postgres16]
steps:
- run: docker run -d --name db -e POSTGRES_PASSWORD=pw postgres:${{ matrix. db }}
- run: pytest -m "unit" -q
- run: pytest -m "integration" -q
11) Μικροϋπηρεσίες και εκδηλώσεις
Συμβάσεις υπηρεσιών: OpenAPI/Protobuf έχουν εκδοθεί. δοκιμές συμβατότητας (προς τα πίσω).
Καθοδηγούμενη από γεγονότα:- Μονάδα: χαρτογράφηση γεγονότων πεδίου και αναλλοίωτες.
- Ενσωμάτωση: δημοσίευση/εγγραφή σε πραγματικό μεσίτη (Kafka), σημασιολογία outbox/inbox, ακριβώς μία φορά απομίμηση (τουλάχιστον - idempotent).
- Δοκιμές εκτός λειτουργίας.
12) Δεδομένα και απομόνωση στην ένταξη
Κάθε δοκιμή → ένα μοναδικό σχήμα/βάση δεδομένων (Testcontainers JDBC URL ' TC _ TMPFS =/var/lib/postgresql/data: rw ').
Οι διορθώσεις συναλλαγών (begin→run→rollback) επιταχύνουν τον καθαρισμό.
Για Redis/cache, το πρόθεμα κλειδί είναι 'test: $ {RUN _ ID}:' and 'FLUSHDB' in teardown.
13) Ιδιαιτερότητες του iGaming/Finance
Χρήματα και όρια: δοκιμές με βάση την ιδιοκτησία για αναλλοίωτες ουσίες (υπόλοιπο ≥ 0, συνολικοί περιορισμοί).
Κανονιστική ρύθμιση: έλεγχος καταγραφής (το ημερολόγιο ελέγχου είναι γραμμένο), αμετάβλητα γεγονότα.
Πληρωμές/PSP: δοκιμές ολοκλήρωσης HMAC/mTLS, 'Retry-After', idempotency, dedup 'jti'.
Υπεύθυνο παιχνίδι: δοκιμές κατωφλίου/κανόνα ψύξης. «vchera→segodnya» σε ψεύτικο ρολόι.
14) Αντιπατερίδια
Οι «μονάδες» που αυξάνουν το DB/HTTP είναι ήδη ενσωματωμένες (προκαλούν σύγχυση στα στρώματα και επιβραδύνουν το CI).
Υψηλή κάλυψη λόγω κενών δηλώσεων («καλυπτόμενες, αλλά μη ελεγμένες»).
Moki λογική των υπηρεσιών τρίτων όπου απαιτείται σύμβαση (διαλείμματα κατά την επικαιροποίηση).
Δοκιμές με «νάρκη (5)» αντί για προσδοκίες γεγονότος/κατάστασης.
Κοινή βάση δεδομένων δοκιμών για παράλληλες δοκιμές → φυλή και νιφάδες.
15) Κατάλογος ελέγχου ετοιμότητας Prod
- Πυραμίδα ορίζεται ως το% των Unit/Integration/E2E και των μετοχών-στόχων ανά χρόνο λειτουργίας.
- Οι μονάδες είναι απομονωμένες, γρήγορες, καλύπτουν τις οριακές τιμές και τις αναλλοίωτες.
- Η ενσωμάτωση χρησιμοποιεί ερμητικό περιβάλλον (Testcontainers/Compose), χωρίς κοινά κράτη.
- Οι δοκιμές συμβάσεων (OpenAPI/Σύμφωνο) επαληθεύονται σε CI.
- Δεδομένα δοκιμών - διαχείριση: σπόροι/ανατροπή/προθέματα, ψεύτικο ρολόι.
- Παράλληλη εκτέλεση, αναφορές JUnit/Allure, αντικείμενα καταγραφής εμπορευματοκιβωτίων.
- Μετρήσεις: διάρκεια, φανταχτερό ρυθμό, βαθμολογία μετάλλαξης. προειδοποιήσεις για υποβάθμιση.
- Σενάρια πληρωμής/webhook: HMAC/mTLS, retrai, idempotency, deadup.
- Τεκμηρίωση στρατηγικής και υποδείγματα δοκιμών δειγμάτων.
16) TL· DR
Μονάδα - μέγιστη λογική, ελάχιστο περιβάλλον· Ολοκλήρωση - ελάχιστοι βάλτοι, μέγιστος ρεαλισμός. Κρατήστε την πυραμίδα: Οι ταχείες μονάδες αλιεύουν το 80% των ελαττωμάτων, η ενσωμάτωση επιβεβαιώνει δέσμες και συμβάσεις. Χρησιμοποιήστε ερμητικά δοχεία, συμβατικές δοκιμές, ψεύτικο ρολόι και παραλληλισμό. Μετρήστε όχι μόνο την κάλυψη, αλλά και τη βαθμολογία μετάλλαξης και το φανταχτερό ποσοστό. Ελέγξτε ιδιαίτερα τις διαδρομές πληρωμής/webhook: υπογραφές, retrays και idempotency.