
Υπάρχει κάποιος που έχει κάποιες καλές συμβουλές για το γράψιμο κώδικα δοκιμής για την ανάπτυξη βάσης δεδομένων backend, όπου υπάρχει μεγάλη εξάρτηση από το κράτος;


Συγκεκριμένα, θέλω να γράψω εξετάσεις για τον κωδικό που ανακτήσετε αρχεία από τη βάση δεδομένων, αλλά οι απαντήσεις θα εξαρτηθεί από τα στοιχεία της βάσης δεδομένων (η οποία μπορεί να αλλάξει με την πάροδο του χρόνου).


Οι άνθρωποι συνήθως κάνουν ένα ξεχωριστό σύστημα ανάπτυξης με «παγώσει» βάση δεδομένων, έτσι ώστε κάθε συγκεκριμένη λειτουργία θα πρέπει να επιστρέψει πάντα το ίδιο ακριβώς σύνολο των αποτελεσμάτων;


Είμαι βέβαιος ότι αυτό δεν είναι ένα νέο θέμα, γι 'αυτό θα με ενδιέφερε πολύ να μάθω από την εμπειρία άλλων ανθρώπων.


Υπάρχουν καλά άρθρα εκεί έξω που να συζητήσουν το θέμα των web-based ανάπτυξη γενικότερα;


Συνήθως γράφουν κώδικα PHP, αλλά θα περίμενα όλα αυτά τα ζητήματα είναι σε μεγάλο βαθμό τη γλώσσα και το πλαίσιο αγνωστικιστής.

 
Πώς να Test Κώδικας Web;
========================



Θα πρέπει να εξετάσουμε DBUnit, ή να προσπαθήσει να βρει μια ισοδύναμη PHP (πρέπει να υπάρχει κανείς εκεί έξω). Μπορείτε να το χρησιμοποιήσετε για να προετοιμάσουν τη βάση δεδομένων με ένα συγκεκριμένο σύνολο δεδομένων που αντιπροσωπεύει τα δεδομένα δοκιμών σας, και έτσι κάθε δοκιμή θα εξαρτάται πλέον από τη βάση δεδομένων και κάποια υπάρχουσα κατάσταση. Με αυτό τον τρόπο, κάθε δοκιμή είναι αυτόνομη και δεν θα σπάσει κατά τη διάρκεια της περαιτέρω χρήσης της βάσης δεδομένων.


Ενημέρωση: Μια γρήγορη αναζήτηση στο Google παρουσίασε μια [επέκταση μονάδας DB](http://www.ds-o.com/archives/63-PHPUnit-Database-Extension-DBUnit-Port.html) για phpunit.

 

Έχω ακριβώς το ίδιο πρόβλημα με τη δουλειά μου και θεωρώ ότι η καλύτερη ιδέα είναι να έχουμε ένα PHP script για να δημιουργήσετε ξανά τη βάση δεδομένων και, στη συνέχεια, ένα ξεχωριστό σενάριο όπου ρίχνω τρελό δεδομένα σε αυτό για να δούμε αν σπάει.


Δεν έχω χρησιμοποιήσει ποτέ οποιαδήποτε Μονάδα δοκιμών ή κάτι παρόμοιο, έτσι δεν μπορώ να πω αν δουλεύει ή όχι συγνώμη.

 

Εάν μπορείτε να ρυθμίσετε τη βάση δεδομένων με γνωστή ποσότητα πριν από την εκτέλεση των δοκιμών και την γκρεμίσει στο τέλος, τότε θα ξέρετε ποια δεδομένα εργάζεστε με.


Στη συνέχεια, μπορείτε να χρησιμοποιήσετε κάτι σαν Σελήνιο για να ελέγξετε εύκολα από UI σας (υποθέτοντας web-based εδώ, αλλά υπάρχουν πολλά εργαλεία ελέγχου UI εκεί έξω για άλλες UI-γεύσεις) και ανιχνεύει την παρουσία ορισμένων αρχείων σύρεται προς τα πίσω από τη βάση δεδομένων.


Είναι σίγουρα αξίζει τη σύσταση είτε μια δοκιμαστική έκδοση της βάσης δεδομένων - ή να κάνει σενάρια δοκιμών σας συμπληρώσετε τη βάση δεδομένων με τα γνωστά δεδομένα, στο πλαίσιο των δοκιμών.

 

Αν σας απασχολεί κυρίως με τον έλεγχο του επιπέδου δεδομένων, ίσως να θέλετε να ελέγξετε έξω αυτό το βιβλίο: **Μοτίβα xUnit Test: Refactoring κώδικα δοκιμής** . Ήμουν πάντα σίγουροι για τον εαυτό μου, αλλά αυτό το βιβλίο κάνει μια σπουδαία δουλειά για να βοηθήσει απαριθμήσει τις ανησυχίες όπως και οι επιδόσεις, δυνατότητα αναπαραγωγής, κ.λπ.

 

Θα μπορούσατε να δοκιμάσετε <http://selenium.openqa.org/> είναι περισσότερο για τον έλεγχο GUI και όχι μια εφαρμογή τον έλεγχο του επιπέδου δεδομένων, αλλά δεν καταγράφει τις ενέργειές σας η οποία στη συνέχεια μπορούν να αναπαραχθούν για να αυτοματοποιήσει τις δοκιμές σε διαφορετικές πλατφόρμες.

 

Υποθέτω ότι εξαρτάται από το τι βάσης δεδομένων που χρησιμοποιείτε, αλλά Red Gate (www.red-gate.com) κάνουν ένα εργαλείο που ονομάζεται SQL Γεννήτρια δεδομένων. Αυτό μπορεί να ρυθμιστεί ώστε να συμπληρώσετε τη βάση δεδομένων σας με λογική αναζητούν δεδομένα δοκιμών. Μπορείτε επίσης να το πει να χρησιμοποιείτε πάντα το ίδιο σπόρο σε γεννήτρια τυχαίων αριθμών της, ώστε «τυχαία» τα δεδομένα σας είναι το ίδιο κάθε φορά.


Στη συνέχεια μπορείτε να γράψετε τις δοκιμές μονάδα σας για να κάνουν χρήση αυτής αξιόπιστα, επαναλαμβανόμενα στοιχεία.


Όσο για τον έλεγχο της πλευράς διαδίκτυο των πραγμάτων, είμαι σήμερα ψάχνουν σε σελήνιο (selenium.openqa.org). Αυτό φαίνεται να είναι ένα cross-browser ικανό σύνολο δοκιμών που θα βοηθήσουν τη λειτουργία δοκιμή σας. Ωστόσο, όπως και με όλα αυτά τα εργαλεία web δοκιμής τόπου, δεν υπάρχει πραγματικός τρόπος για να ελέγξετε πόσο καλά αυτά τα πράγματα *φαίνονται* σε όλα τα προγράμματα περιήγησης, χωρίς να ρίχνει μια ανθρώπινο μάτι από πάνω τους!

 

Εδώ είναι η στρατηγική μου (χρησιμοποιώ JUnit, αλλά είμαι σίγουρος ότι υπάρχει ένας τρόπος για να γίνει το ισοδύναμο σε PHP):


Έχω μια μέθοδο που εκτελείται πριν από όλες τις δοκιμές μονάδα για μια συγκεκριμένη τάξη DAO. Θα πρέπει να θέσει τη βάση δεδομένων dev σε μια γνωστή κατάσταση (προσθέτει όλα τα δεδομένα δοκιμών, κ.λπ.). Όπως έχω τρέξει τις δοκιμές, έχω να παρακολουθείτε όλα τα δεδομένα προστίθενται στην γνωστή κατάσταση. Αυτά τα δεδομένα καθαριστεί στο τέλος κάθε δοκιμής. Μετά από όλα τα τεστ για την κατηγορία έχουν τρέξει, μια άλλη μέθοδος αφαιρεί όλα τα δεδομένα δοκιμών στη βάση δεδομένων dev, αφήνοντας στην κατάσταση που βρισκόταν πριν από την εκτέλεση των δοκιμών. Είναι ένα κομμάτι της δουλειά να κάνουμε όλα αυτά, αλλά εγώ συνήθως γράφουν τις μεθόδους σε μια τάξη DBTestCommon όπου όλα τα μαθήματα τεστ DAO μου να έχετε πρόσβαση σε αυτά.

 

Θα ήθελα να προτείνω να χρησιμοποιήσετε τρεις βάσεις δεδομένων. Μια βάση δεδομένων παραγωγής, μια βάση δεδομένων ανάπτυξης (γεμάτη με ορισμένα σημαντικά δεδομένα για κάθε developer) και μία βάση δεδομένων δοκιμής (με άδεια τραπέζια και ίσως μερικές γραμμές που πάντα χρειάζεται).


Ένας τρόπος για να ελέγξετε κώδικα της βάσης δεδομένων είναι:


1. Βάλτε μερικές γραμμές (χρησιμοποιώντας SQL) να προετοιμαστεί κατάσταση
2. Εκτελέστε τη λειτουργία που θέλετε να δοκιμάσετε
3. Σύγκριση αναμένεται με τα πραγματικά αποτελέσματα. Εδώ μπορείτε να χρησιμοποιήσετε κανονικό πλαίσιο δοκιμών μονάδας σας
4. Καθαρίστε τις γραμμές που άλλαξαν (οπότε η επόμενη κίνηση δεν θα δείτε την προηγούμενη εκτέλεση)


Ο καθαρισμός μπορεί να γίνει με τυποποιημένο τρόπο (φυσικά, μόνο στη βάση δεδομένων δοκιμών) με `DELETE * FROM table`.

 

Σε γενικές γραμμές συμφωνώ με τον Πέτρο, αλλά για τη δημιουργία και τη διαγραφή των δεδομένων των δοκιμών δεν θα χρησιμοποιήσει άμεσα SQL. Προτιμώ να χρησιμοποιώ κάποια σάλτσες API που χρησιμοποιείται σε προϊόντα για τη δημιουργία δεδομένων παρόμοια με την παραγωγή όσο το δυνατόν ...

 

Χρησιμοποιούμε ένα στη μνήμη δεδομένων (HSQL: <http://hsqldb.org/> ). Αδρανοποίησης ( <http://www.hibernate.org/> ) καθιστά εύκολο για μας να επισημάνω δοκιμές μονάδα μας στο db δοκιμές, με το πρόσθετο πλεονέκτημα ότι τρέχει σαν αστραπή ..

 