spock interview questions with answers
Εκκαθαρίστε επιτυχώς τη συνέντευξη Spock με αυτήν τη λίστα ερωτήσεων συνέντευξης Spock:
Σε αυτό Spock Tutorials για όλους , εξερευνήσαμε τα πάντα Ενσωμάτωση και λειτουργικές δοκιμές στο Spock στο προηγούμενο σεμινάριό μας.
Αυτό το σεμινάριο θα καλύψει τις πιο συχνές ερωτήσεις συνέντευξης σχετικά με το πλαίσιο Spock.
Θα προσπαθήσουμε επίσης να κατανοήσουμε τις μεθόδους προσάρτησης Spock και την ενσωματωμένη υποστήριξη επεκτάσεων που καθιστούν το Spock ένα πραγματικά ισχυρό εργαλείο για πολλούς τύπους δοκιμών όπως το Unit, το Integration και το end-to-end.
Οι πιο δημοφιλείς ερωτήσεις συνέντευξης Spock
Παρακάτω αναφέρονται μερικές από τις πιο συχνές ερωτήσεις συνέντευξης Spock με απαντήσεις και παραδείγματα.
Ας εξερευνήσουμε !!
Ε # 1) Μπορεί ένα τεστ Spock να έχει πολλαπλές πότε και μετά μπλοκάρει;
Απάντηση: Συνιστάται γενικά να κάνετε μικρές δοκιμές ή σενάρια, καθώς η προσπάθεια να κάνετε πολλά πράγματα σε μια μόνο δοκιμή μπορεί να είναι μια μυρωδιά κώδικα. Τούτου λεχθέντος, είναι απολύτως έγκυρο να έχετε πολλαπλά πότε και στη συνέχεια μπλοκάρει σε μια δοκιμή. Το τεστ θα θεωρείται επιτυχές μόνο όταν όλα τα μπλοκ τότε είναι σε κατάσταση επιτυχίας.
Ας δούμε ένα παράδειγμα για να το εξηγήσουμε αυτό:
def 'illustrate multiple when and then blocks'() { given: def input1 = 50 def input2 = 100 def result when: result = input1 + input2 then: result == 150 when: result = input2 - input1 then: result == 50 }
Στο παραπάνω μπλοκ κώδικα, μπορείτε να δείτε ότι έχουμε 2 μπλοκ πότε και μετά.
Σημειώστε παρακάτω τα σημεία:
- Τα μπλοκ εκτελούνται με τη σειρά εμφάνισής τους, δηλαδή διαδοχικά.
- Η αποτυχία καθενός στη συνέχεια ο αποκλεισμός θα οδηγήσει σε αποτυχία του τεστ.
- Οι ισχυρισμοί σε όλα τα μπλοκ τότε πρέπει να περάσουν για να επιτύχει η συνολική δοκιμή.
Ε # 2) Ποιες είναι όλες οι μέθοδοι προσάρτησης στο Spock;
καλύτερη εφαρμογή κατασκοπευτικού τηλεφώνου για Android
Απάντηση: Οι μέθοδοι προσάρτησης είναι όπως οι επιστροφές κλήσεων που καλούνται όταν ενεργοποιείται ένα συγκεκριμένο άγκιστρο συμβάντων.
Ο Spock παρείχε 4 δοκιμαστικά φωτιστικά που ενεργοποιούνται σε διαφορετικά γεγονότα:
- setupSpec - Εκτελείται μία φορά πριν ξεκινήσει ολόκληρη η εκτέλεση του αρχείου Spec.
- cleanupSpec - Εκτελείται μία φορά όταν εκτελούνται όλες οι δοκιμές στο δεδομένο αρχείο Spec
- εγκατάσταση - Εκτελείται μία φορά πριν από κάθε δοκιμή στις προδιαγραφές.
- καθάρισε - Εκτελείται μία φορά μετά από κάθε δοκιμή στις προδιαγραφές.
Ας δούμε ένα δείγμα κώδικα για να απεικονίσουμε τις μεθόδους προσάρτησης:
class TestFixtureSpec extends Specification { def setupSpec() { println 'in setup spec!' } def cleanupSpec() { println 'in cleanup spec!' } def setup() { println 'in setup!' } def cleanup() { println 'in cleanup!' } def 'test spec1'() { given: println '****test spec1****' } def 'test spec2'() { given: println '****test spec2****' }}
Παρακάτω είναι η έξοδος του παραπάνω δείγματος κώδικα:
στις προδιαγραφές εγκατάστασης!
στη ρύθμιση!
**** δοκιμή spec1 ****
σε καθαρισμό!
στη ρύθμιση!
**** δοκιμή spec2 ****
σε καθαρισμό!
σε προδιαγραφές καθαρισμού!
Όπως φαίνεται παραπάνω, μπορείτε να παρατηρήσετε ότι οι προδιαγραφές ρύθμισης και καθαρισμού καλούνται μόνο μία φορά για ολόκληρη την προδιαγραφή και τα βήματα εγκατάστασης και καθαρισμού καλούνται μία φορά ανά δοκιμή.
Q # 3) Μπορούν οι δοκιμές Spock να χρησιμοποιηθούν για τη δοκιμή υπηρεσιών που βασίζονται σε REST;
Απάντηση: Ναι, το πλαίσιο Spock μπορεί να χρησιμοποιηθεί για τη δημιουργία δοκιμών E2E ή ενοποίησης για αναπτυσσόμενες υπηρεσίες ανάπαυσης χρησιμοποιώντας κοινές βιβλιοθήκες Java όπως πρότυπο Rest κ.λπ. με άλλα πλαίσια όπως Σελήνιο ).
Ας το δούμε με ένα απλό παράδειγμα που χρησιμοποιεί την κλάση RestTemplate της Spring και εκτελεί μια λειτουργία get σε ένα δημόσιο API που φιλοξενείται και ελέγχει την απόκριση ως μηδενική.
Παράδειγμα:
class RestApiIntegrationSpec extends Specification { def 'check rest api status'() { when: 'a rest call is performed to the status page' RestTemplate restTemplate = new RestTemplate() String response = restTemplate.getForObject('https://httpbin.org/get', String.class) then: response != null } }
Στο παραπάνω παράδειγμα, μπορείτε να ανατρέξετε στις προδιαγραφές Spock που χρησιμοποιούνται για να επιβεβαιώσετε την απόκριση ενός δημόσιου API.
Q # 4) Ποιοι είναι οι περιορισμοί του πλαισίου Spock;
Απάντηση: Παρόλο που η καμπύλη μάθησης για το πλαίσιο Spock δεν είναι τόσο απότομη όσο είναι εύκολο να μάθει, η δηλωτική σύνταξή της την καθιστά εξαιρετικά ευανάγνωστη.
Εν τω μεταξύ, υπάρχουν μερικά σημεία που θα μπορούσαν να ληφθούν υπόψη:
- Για εφαρμογές σε βάση κώδικα Java, η χρήση του Spock θα έχει ως αποτέλεσμα την προσθήκη μιας νέας στοίβας γλώσσας, δηλαδή του Groovy.
- Οι δοκιμές Spock εκτελούνται ελαφρώς πιο αργές από τις εγγενείς δοκιμές JUnit.
- Η υποστήριξη IDE για το Spock δεν είναι τόσο καλή όσο για άλλα πλαίσια όπως το JUnit.
Παρά όλα τα παραπάνω σημεία, τα πλεονεκτήματα του πλαισίου Spock υπερτερούν της μικρής λίστας μειονεκτημάτων που έχει το Spock.
Ε # 5) Εξηγήστε μερικές από τις ενσωματωμένες επεκτάσεις του πλαισίου Spock.
Απάντηση: Το Spock παρέχει πολλές ενσωματωμένες επεκτάσεις / άγκιστρα / σκανδάλη που βασίζονται κυρίως σε σχολιασμούς (Είδαμε μερικά από αυτά στην ενότητα / ερώτηση των δοκιμαστικών στοιχείων).
Ας δούμε μερικές από τις ενσωματωμένες συζητήσεις με παραδείγματα:
@Αγνοώ: Για να αποτρέψετε την εκτέλεση μιας δυνατότητας (ή μεμονωμένης μεθόδου). Προκειμένου να χρησιμοποιηθεί απλά η μέθοδος διακόσμησης (ατομική μέθοδος δοκιμής) ή ολόκληρης της προδιαγραφής, αυτό θα διασφαλίσει ότι η σχολιασμένη μέθοδος ή η τάξη δεν θα εκτελεστεί.
@Ignore def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
@IgnoreRest: Αυτός ο σχολιασμός είναι χρήσιμος όταν θέλετε απλώς να επιλέξετε έναν και να εκτελέσετε τις υπόλοιπες μεθόδους της συγκεκριμένης προδιαγραφής.
@IgnoreRest def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 } def 'check addition of 2 numbers'() { given: int input1 = 10 int input2 = 25 expect: input1.getClass().toString() == 'class java.lang.Integer' input2.getClass().toString() == 'class java.lang.Integer' input1 = Integer.MIN_VALUE when: int result = input1 + input2 then: result == 35 }
Όπως φαίνεται στο παραπάνω παράδειγμα, η μέθοδος που επισημαίνεται με το @IgnoreRest θα εκτελεστεί και οι υπόλοιπες δοκιμές θα αγνοηθούν.
@IgnoreIf: Αυτός ο σχολιασμός παραβλέπεται υπό όρους.
Για παράδειγμα: Εάν δεν θέλετε να εκτελέσετε ορισμένες δοκιμές σε Mac OS, τότε μπορείτε να χρησιμοποιήσετε έναν συνδυασμό του @IgnoreIf με το System.getProperty ('os.name') που θα διασφαλίσει ότι οι δοκιμές θα εκτελεστούν μόνο εάν βρεθεί το αντίστοιχο λειτουργικό σύστημα .
Ας προσπαθήσουμε να το κατανοήσουμε με το παρακάτω δείγμα κώδικα:
@IgnoreIf({ System.getProperty('os.name').contains('Mac') }) def 'check case-insensitive equality of 2 strings'() { given: 'two input strings' String str1 = 'hello world' String str2 = 'HELLO world' when: 'strings are lowercased' str1 = str1.toLowerCase() str2 = str2.toLowerCase() then: 'equal strings should return success' str1 == str2 }
Στο παραπάνω δείγμα κώδικα, χρησιμοποιήσαμε το σχολιασμό @IgnoreIf με συνθήκη στο System.getProperty που θα ελέγξει για 'Mac' στην τιμή ιδιοκτησίας και θα αγνοήσει μόνο εάν η αντιστοίχιση συνθηκών είναι επιτυχής.
Ας δούμε μια ακόμη επέκταση εδώ, δηλαδή @Τέλος χρόνου: Αυτό βοηθά να αναφερθεί μια τιμή χρονικού ορίου στη μονάδα της επιλογής σας για τη δοκιμή υπό εκτέλεση και εάν παραβιαστεί το όριο χρονικού ορίου, η δοκιμή θα δημιουργήσει μια εξαίρεση.
Ένα άλλο σημαντικό σημείο που πρέπει να σημειωθεί εδώ είναι ότι ο σχολιασμός @Timeout μπορεί να αναφερθεί και στην πλήρη προδιαγραφή και αυτό θα συνδυάσει τη διάρκεια όλων των μεμονωμένων δοκιμών και θα ρίξει μια εξαίρεση σε περίπτωση παραβίασης του κατωφλίου.
@Timeout(value=10, unit= TimeUnit.MILLISECONDS) class SampleSpec extends Specification { def 'check case-insensitive equality of 2 strings'() { //test1 } def 'check addition of 2 numbers'() { //test2 } }
Στον παραπάνω κώδικα, εάν ο συνολικός χρόνος εκτέλεσης των προδιαγραφών υπερβαίνει τα 10 ms τότε η εκτέλεση του σεναρίου θα αποτύχει. Μπορείτε να δείτε την έξοδο με λεπτομέρειες σφάλματος στην κονσόλα σφαλμάτων.
Παρόμοια με τις προαναφερθείσες επεκτάσεις, υπάρχουν μερικές άλλες ενσωματωμένες επεκτάσεις, όπως:
συγχώνευση είδος c ++ αναδρομικά
@ Απαιτεί: Αυτό απαιτεί μια συγκεκριμένη συνθήκη για να είναι αληθινή.
@Θέμα: Για να συνδέσετε τυχόν ελαττώματα που σχετίζονται με τη δοκιμαστική θήκη κ.λπ.
Αυτές οι επεκτάσεις προσθέτουν μεγάλη ευελιξία και ισχύ στις προδιαγραφές Spock και παρέχουν πολύ έλεγχο για την εκτέλεση της δοκιμής.
συμπέρασμα
Έτσι, έχουμε καλύψει τις πιο δημοφιλείς ερωτήσεις συνέντευξης Spock εδώ σε αυτό το σεμινάριο. Η καμπύλη εκμάθησης για το Spock είναι χαμηλή λόγω του γεγονότος ότι η γλώσσα groovy ακολουθεί ένα δηλωτικό στυλ προγραμματισμού και είναι εξαιρετικά αναγνώσιμο.
Αν και σχετικά νέο, το Spock κερδίζει δημοτικότητα ως πλαίσιο επιλογής για τη σύνταξη διαφορετικών ειδών δοκιμών Ιάβα ή εφαρμογές που βασίζονται στο Groovy.
Ελπίζω, απολαύσατε όλα τα ενημερωτικά σεμινάρια σε αυτήν τη σειρά Spock. Είμαστε σίγουροι ότι αυτά τα σεμινάρια θα εμπλουτίσουν τις γνώσεις και την κατανόησή σας για το Spock.
Εκπαιδευτικό πρόγραμμα PREV | Πρώτο σεμινάριο
Συνιστώμενη ανάγνωση
- Γράφοντας μονάδες δοκιμών με Spock Framework
- Spock για ενσωμάτωση και λειτουργική δοκιμή με σελήνιο
- Spock Mocking and Stubbing (Παραδείγματα με Video Tutorials)
- Δοκιμές βάσει δεδομένων ή παραμετροποιημένες με πλαίσιο Spock
- Tutorial Spock: Δοκιμές με Spock και Groovy
- Ερωτήσεις και απαντήσεις συνέντευξης
- Ερωτήσεις και απαντήσεις συνέντευξης δοκιμών ETL
- 20 πιο δημοφιλείς ερωτήσεις και απαντήσεις στη συνέντευξη TestNG