Η κοροϊδία των πάντα στις δοκιμές μπορεί να οδηγήσει σε αρκετές πιθανές παγίδες, οι οποίες μπορούν να επηρεάσουν αρνητικά την αποτελεσματικότητα και την αξιοπιστία της στρατηγικής δοκιμών σας. Ακολουθούν μερικά από τα βασικά ζητήματα που σχετίζονται με την υπερβολική κοροϊδία:
1. Ψυκτικές δοκιμές και σφιχτή σύζευξη **
Όταν χλευάζετε κάθε εξάρτηση, οι δοκιμές σας συνδέονται στενά με τις λεπτομέρειες εφαρμογής του υπό δοκιμή κώδικα. Αυτό σημαίνει ότι ακόμη και οι μικρές αλλαγές στις εσωτερικές λειτουργίες του κώδικα μπορούν να σπάσουν τις δοκιμές, ακόμη και αν η εξωτερική συμπεριφορά παραμένει αμετάβλητη. Τέτοιες δοκιμές είναι εύθραυστες και απαιτούν συχνές ενημερώσεις, οι οποίες μπορεί να είναι χρονοβόρες και απογοητευτικές [6] [9].
2. Ψεύτικη εμπιστοσύνη και κρυμμένα σφάλματα **
Η υπερβολική κοροϊδία μπορεί να οδηγήσει σε ψευδή εμπιστοσύνη στην αξιοπιστία του κώδικα. Με την απομόνωση εξαρτημάτων με ψεύτικα, ενδέχεται να χάσετε θέματα πραγματικού κόσμου που εκδηλώνονται μόνο όταν όλα τα εξαρτήματα αλληλεπιδρούν μαζί. Αυτό μπορεί να οδηγήσει σε σφάλματα να ανακαλυφθούν στην παραγωγή και όχι κατά τη διάρκεια των δοκιμών, υπονομεύοντας το σκοπό της δοκιμής [1] [9].
3. Υπερπογύθους και προκλήσεις συντήρησης **
Η δημιουργία και η διατήρηση των ψαριών, ειδικά για σύνθετα συστήματα, μπορεί να είναι προκλητική και χρονοβόρα. Καθώς το σύστημα εξελίσσεται, τα ψεύτικα μπορεί να χρειαστεί να ενημερώνονται συχνά για να αντικατοπτρίζουν τις αλλαγές στις εξαρτήσεις ή τη συμπεριφορά, οι οποίες μπορεί να είναι δυσκίνητες και επιρρεπείς σε σφάλματα [9] [11].
4. Δυσκολία στην επαλήθευση της πραγματικής συμπεριφοράς **
Το Mocking Everything μπορεί να δυσκολευτεί να επαληθεύσει πώς συμπεριφέρεται το σύστημα σε σενάρια πραγματικού κόσμου. Οι δοκιμές ενσωμάτωσης, οι οποίες περιλαμβάνουν λιγότερα ψεύτικα, είναι συχνά καλύτερα προσαρμοσμένες για το σκοπό αυτό. Η υπερβολική εξάρτηση από τα ψεύτικα μπορεί να οδηγήσει σε δοκιμές που δεν αντικατοπτρίζουν με ακρίβεια τις αλληλεπιδράσεις του πραγματικού κόσμου [9] [11].
5. Αναποτελεσματική χρήση πόρων **
Η υπερβολική κοροϊδία μπορεί να οδηγήσει σε αναποτελεσματική χρήση των πόρων. Η διαμόρφωση των ψεύτων μπορεί να καταναλώνει περισσότερο χρόνο από το να γράφει την πραγματική λογική δοκιμής, ειδικά σε βαριά ή σύνθετα συστήματα βάσης δεδομένων [2] [11]. Αυτή η αναποτελεσματικότητα μπορεί να επιβραδύνει τη διαδικασία ανάπτυξης και να αυξήσει το κόστος δοκιμών.
6. Επικάλυψη με δοκιμές ολοκλήρωσης **
Όταν οι δοκιμές μονάδας καλύπτουν σενάρια που δοκιμάζονται επίσης με δοκιμές ενσωμάτωσης χωρίς ψεύτικες, εγείρει ερωτήματα σχετικά με την προστιθέμενη αξία από αυτές τις δοκιμές μονάδας. Οι δοκιμές ενσωμάτωσης συχνά παρέχουν πιο ολοκληρωμένη κάλυψη της συμπεριφοράς του συστήματος χωρίς την ανάγκη για εκτεταμένη κοροϊδία [2] [7].
7. Δυναμικό για λανθασμένη ψεύτικη συμπεριφορά **
Εάν τα ψεύτικα δεν μιμούνται με ακρίβεια τη συμπεριφορά των πραγματικών αντικειμένων που αντικαθιστούν, οι δοκιμές ενδέχεται να περάσουν ακόμη και όταν το πραγματικό σύστημα θα αποτύχει. Αυτό μπορεί να οδηγήσει σε μια ψευδή αίσθηση ασφάλειας και χαμένα σφάλματα [5] [9].
Συνοπτικά, ενώ η κοροϊδία μπορεί να είναι ένα χρήσιμο εργαλείο για τη δοκιμή, η υπερβολική χρήση μπορεί να οδηγήσει σε εύθραυστες δοκιμές, ψευδή εμπιστοσύνη και αναποτελεσματικότητα. Είναι ζωτικής σημασίας να χρησιμοποιείτε το ψεύτικο και να εξετάσετε εναλλακτικές λύσεις όπως οι δοκιμές ενσωμάτωσης όταν είναι δυνατόν.
Αναφορές:[1] https://cs-syd.eu/posts/2021-10-22-why-mocking-is-a-bad-idea
[2] https://softwareengineering.stackkexchange.com/questions/454887/how-to-avoid-too-much-mocking-in-unit-tests-in-a-database-heavy-method
[3] https://ryanclements.dev/posts/you-probably-dont-need-mocking
[4] https://stackoverflow.com/questions/61793083/should-i-mock-every-single-dependencies-in-unit-testing
[5] https://softwareengineering.stackexchange.com/questions/382087/how-exactly-should-unit-tests-be-written-without-mocking-
[6] https://pytest-with-eric.com/mocking/pytest-common-mocking-problems/
[7] https://www.reddit.com/r/typescript/comments/1ei9f4a/is_it_me_or_mocking_everything_everywherhwhere_in/
[8] https://stackoverflow.com/questions/38181/when-should-i-mock
[9] https://www.qodo.ai/blog/mock-testing/
[10] https://hynek.me/articles/what-to-mock-in-5-mins/
[11] https://vinted.engineering/2023/10/02/mocking-framework-downside/