Πώς δοκιμή μονάδα μου επιμονή;




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


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


1. ερωτήματα δοκιμών.
2. Έλεγχος ένθετα. Πώς μπορώ να ξέρω ότι το ένθετο που έχει πάει στραβά αν αποτύχει? Μπορώ να το δοκιμάσετε με την εισαγωγή και, στη συνέχεια, την αναζήτηση, αλλά πώς μπορώ να ξέρω ότι το ερώτημα δεν ήταν λάθος;
3. Δοκιμές ενημερώσεις και διαγράφει - ίδιο με ένθετα δοκιμές


Ποιες είναι οι καλύτερες πρακτικές για να κάνει αυτά;







Όσον αφορά SQL δοκιμές: Γνωρίζω ότι αυτό θα μπορούσε να γίνει, αλλά αν μπορώ να χρησιμοποιήσω μια Mapper O / R, όπως NHibernate, που αποδίδει κάποια κονδυλώματα ονομασία στα ψευδώνυμα που χρησιμοποιούνται για τα ερωτήματα εξόδου, και καθώς αυτό είναι κάπως απρόβλεπτη και δεν είμαι σίγουρος θα μπορούσα να δοκιμάσει γι 'αυτό.


Θα πρέπει να απλά, να εγκαταλείψει τα πάντα και απλά να εμπιστεύονται NHibernate; Δεν είμαι σίγουρος ότι είναι συνετή.
Κοίτα σε Μονάδα DB. Πρόκειται για μια βιβλιοθήκη της Java, αλλά πρέπει να υπάρχει ένα C # ισοδύναμο. Σας επιτρέπει να προετοιμάσει τη βάση δεδομένων με ένα σύνολο δεδομένων, έτσι ώστε να γνωρίζουμε τι είναι στη βάση δεδομένων, τότε μπορείτε να διασυνδεθούν με την DB μονάδα για να δούμε τι είναι στη βάση δεδομένων. Μπορεί να τρέξει ενάντια σε πολλά συστήματα βάσεων δεδομένων, ώστε να μπορείτε να χρησιμοποιήσετε την πραγματική ρύθμιση της βάσης δεδομένων σας, ή να χρησιμοποιήσετε κάτι άλλο, όπως HSQL σε Java (μια εφαρμογή βάσης δεδομένων Java με ένα στη μνήμη επιλογή).


Αν θέλετε να ελέγξετε ότι ο κώδικας σας χρησιμοποιεί τη βάση δεδομένων σωστά (που κατά πάσα πιθανότητα θα πρέπει να κάνει), τότε αυτό είναι ο τρόπος να πάει να απομονώσει κάθε δοκιμή και τη διασφάλιση της βάσης δεδομένων έχει τα αναμενόμενα στοιχεία προετοιμασμένοι.
Η προτιμώμενη μέθοδος είναι να χρησιμοποιήσετε πραγματικά την ιδιότητα υπό όρους για να τυλίξει τις κλήσεις εντοπισμού σφαλμάτων σας, μην χρησιμοποιήσετε τις οδηγίες μεταγλωττιστή. #ifs μπορεί να πάρει δύσκολες και μπορεί να οδηγήσει σε περίεργα προβλήματα κατασκευής.


Ένα παράδειγμα της χρήσης ενός υπό όρους χαρακτηριστικό είναι η εξής (σε C #, αλλά λειτουργεί σε VB.NET πολύ):



```
[ Conditional("Debug") ]
private void WriteDebug(string debugString)
{
  // do stuff
}

```

Κατά τη μεταγλώττιση, χωρίς το σετ σημαία DEBUG, κάθε κλήση προς WriteDebug θα καταργηθούν όπως υποτίθεται συνέβαινε με Debug.Write (). Συχνά αυτό επιτυγχάνεται με τη χρήση [«Driven δεδομένων Συνδρομές»](https://msdn.microsoft.com/en-us/library/ms169673.aspx) , αλλά αυτή η λειτουργία είναι διαθέσιμη μόνο σε ορισμένες εκδόσεις του SQL: Enterprise και Business Intelligence, αλλά όχι στο πρότυπο.


Έτσι, υπάρχει μια σειρά από δημιουργικές λύσεις. Αλλά δεν μου αρέσει κάποια από αυτές, και απαιτούν ένα δίκαιο κομμάτι της εργασίας έξω από SSRS.


Οι λύσεις που έχω δει περιλαμβάνουν: Δημιουργία της εγγραφής και στη συνέχεια απενεργοποίηση ή επιτρέπουν την εργασία SQL που στέλνει τη συνδρομή (που προσδιορίζονται από GUID.)


Δημιουργήστε ένα .exe .NET περιτύλιγμα για να χειριστεί την αποστολή του email. Μπορεί να εκτελέσετε το ερώτημα πρώτα να δούμε πόσα επέστρεψε σειρές, και στη συνέχεια, αν χρειαστεί, να δημιουργήσει την έκθεση και να συμπεριληφθεί σε ένα email. Προσθέστε οδηγός σας σε JMeter / lib φάκελο


Στη συνέχεια, προσθέστε μια [Διαμόρφωση JDBC σύνδεσης](https://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request%20%20http://jmeter.apache.org/usermanual/component_reference.html#JDBC_Connection_Configuration) και συμπληρώστε:


* URL Βάση Δεδομένων: <https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-reference-configuration-properties.html>
* JDBC Driver κατηγορία: com.mysql.jdbc.Driver
* σύνδεσης και τον κωδικό πρόσβασης
* Όνομα μεταβλητής θα εντοπίσει τη σύνδεση


Στη συνέχεια, προσθέστε μια [Αίτηση JDBC](https://jmeter.apache.org/usermanual/component_reference.html#JDBC_Request) κάτω από ένα [νήμα Ομάδα](https://jmeter.apache.org/usermanual/component_reference.html#Thread_Group)


και συμπληρώστε:


* Μεταβλητή Όνομα: ίδια τιμή με εκείνη στο JDBC Διαμόρφωση σύνδεσης
* Οι άλλοι τομείς που εξαρτώνται από το τι θέλετε να κάνετε


Διαβάστε αυτό το σεμινάριο:


* [http://jmeter.apache.org/usermanual/build-db-test-plan.html](https://jmeter.apache.org/usermanual/build-db-test-plan.html) **Για την «ορθογραφία λάθος» μέρος (Μήπως εννοείτε)**


* Θα μπορούσατε να κάνετε κάποια `LIKE`ερωτήματα στο db π.χ. `LIKE %j%e%a%n%s%`, αλλά αν θέλετε να το κάνετε καλά, θα πρέπει να χρησιμοποιήσετε μια βιβλιοθήκη αναζήτησης όπως αυτό:


	+ <https://github.com/TomLingham/Laravel-Searchy>
	+ <http://tnt.studio/blog/did-you-mean-functionality-with-laravel-scout>



> 
> Μπορείτε να δημοσιεύσετε το αρχείο ρυθμίσεων στον κατάλογο της εφαρμογής σας και να παρακάμψετε τις ρυθμίσεις, εκτελώντας php τεχνίτη πωλητή: δημοσιεύει για να αντιγράψετε τις ρυθμίσεις στο φάκελο config σας όπως searchy.php
> 
> 
> Μπορείτε να ορίσετε το προεπιλεγμένο πρόγραμμα οδήγησης που θα χρησιμοποιηθεί για τις αναζητήσεις στο αρχείο ρυθμίσεων. Οι επιλογές σας (στην παρούσα φάση) είναι: ασαφή, απλό και Levenshtein.
> 
> 
> Μπορείτε επίσης να παρακάμψετε αυτές τις μεθόδους, χρησιμοποιώντας την ακόλουθη σύνταξη κατά την εκτέλεση μιας αναζήτησης:
> 
> 
> 


Με τον καθορισμό [Levenshtein απόσταση](https://en.wikipedia.org/wiki/Levenshtein_distance) μπορείτε να finetune πόσο μακριά μια λέξη μπορεί να είναι.


* Αν χρειάζεστε καλύτερη απόδοση θα πρέπει να εξετάσει κάτι σαν `solr`ή `elasticsearch`για το έργο αυτό.


<https://wiki.apache.org/solr/SpellCheckComponent>
<https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-fuzzy-query.html>


**Για το τμήμα μετάφρασης**


Απλά θα πρέπει να έχει ένα λεξικό έτοιμο σε βάση δεδομένων ή εντοπισμό των αρχείων σας και εκτελέστε το χαμηλότερο σημείο εισόδου και αυτό. Αναμείνετε υψηλή φορές υπολογιστών τόσο για τη διόρθωση ορθογραφίας και της μετάφρασης στον κώδικά σας. Κάνατε πολύ καλή δουλειά στο να συνοψίσετε τι είναι φοβερό στο Node.js. Η αίσθησή μου είναι ότι το Node.js είναι ιδιαίτερα κατάλληλο για εφαρμογές όπου θα θέλατε να διατηρήσετε μια μόνιμη σύνδεση από το πρόγραμμα περιήγησης πίσω στον διακομιστή. Χρησιμοποιώντας μια τεχνική γνωστή ως ["long-polling"](https://en.wikipedia.org/wiki/Push_technology#Long_polling), μπορείτε να γράψετε μια εφαρμογή που στέλνει ενημερώσεις στον χρήστη σε πραγματικό χρόνο. Η πραγματοποίηση long polling σε πολλούς από τους γίγαντες του διαδικτύου, όπως το [Ruby on Rails](https://en.wikipedia.org/wiki/Ruby_on_Rails) ή το [Django](https://en.wikipedia.org/wiki/Django_%28web_framework%29), θα δημιουργούσε τεράστιο φόρτο στον διακομιστή, επειδή κάθε ενεργός πελάτης τρώει μια διεργασία του διακομιστή. Αυτή η κατάσταση ισοδυναμεί με επίθεση [tarpit](https://en.wikipedia.org/wiki/Tarpit_(networking)). Όταν χρησιμοποιείτε κάτι όπως το Node.js, ο διακομιστής δεν έχει ανάγκη να διατηρεί ξεχωριστά νήματα για κάθε ανοιχτή σύνδεση. 


Αυτό σημαίνει ότι μπορείτε να δημιουργήσετε μια [εφαρμογή συνομιλίας με βάση το πρόγραμμα περιήγησης](https://github.com/rivalslayer/node_chat) σε Node.js που δεν χρειάζεται σχεδόν καθόλου πόρους συστήματος για να εξυπηρετεί πολλούς πελάτες. Κάθε φορά που θέλετε να κάνετε αυτού του είδους τη μακροχρόνια αναζήτηση, το Node.js είναι μια εξαιρετική επιλογή. 


Αξίζει να αναφέρουμε ότι και η Ruby και η Python έχουν εργαλεία για να κάνουν κάτι τέτοιο ([eventmachine](http://rubyeventmachine.com/) και [twisted](https://twistedmatrix.com/trac/), αντίστοιχα), αλλά ότι το Node.js το κάνει εξαιρετικά καλά, και από την αρχή. Η JavaScript είναι εξαιρετικά καλά τοποθετημένη σε ένα μοντέλο ταυτόχρονης λειτουργίας βασισμένο σε callback, και υπερέχει εδώ. Επίσης, η δυνατότητα σειριοποίησης και αποσειριοποίησης με JSON εγγενές τόσο στον πελάτη όσο και στον διακομιστή είναι αρκετά έξυπνη.


Ανυπομονώ να διαβάσω άλλες απαντήσεις εδώ, αυτή είναι μια φανταστική ερώτηση.


Αξίζει να επισημάνουμε ότι το Node.js είναι επίσης εξαιρετικό για καταστάσεις στις οποίες θα επαναχρησιμοποιήσετε πολύ κώδικα σε όλο το χάσμα πελάτη/εξυπηρετητή. Το [Meteor framework](https://meteor.com) το κάνει αυτό πολύ εύκολο, και πολλοί άνθρωποι προτείνουν ότι αυτό μπορεί να είναι το μέλλον της ανάπτυξης ιστοσελίδων. Μπορώ να πω από την εμπειρία μου ότι είναι πολύ διασκεδαστικό να γράφεις κώδικα στο Meteor, και ένα μεγάλο μέρος αυτού είναι να ξοδεύεις λιγότερο χρόνο σκεπτόμενος πώς θα αναδομήσεις τα δεδομένα σου, ώστε ο κώδικας που εκτελείται στο πρόγραμμα περιήγησης να μπορεί εύκολα να τα χειριστεί και να τα μεταβιβάσει πίσω.


Εδώ είναι ένα άρθρο για το Pyramid και το long-polling, το οποίο αποδεικνύεται ότι είναι πολύ εύκολο να ρυθμιστεί με λίγη βοήθεια από το gevent: [*TicTacToe και Long Polling με την Pyramid*](http://michael.merickel.org/2011/6/21/tictactoe-and-long-polling-with-pyramid/). Θα πρέπει να δώσετε περισσότερες πληροφορίες σχετικά με το περιβάλλον ανάπτυξής σας για να πάρετε μια συγκεκριμένη απάντηση.


Για παράδειγμα, με ένα C # έργο στο Visual Studio, μπορείτε να κάνετε δεξί κλικ στα Project-> Ιδιότητες και, στη συνέχεια, να συμπληρώσετε το πεδίο «Εντολή επιχειρήματα γραμμή» στην καρτέλα «Debug». Αυτή είναι η γνώμη μου, αλλά? όπως ακριβώς και οι τάξεις περίπτωση δεν, θα ήθελα να εφαρμόσουν μια `copy`μέθοδο του είδους στην τάξη για να καταστεί δυνατή η τροποποίηση, διατηρώντας παράλληλα το αμετάβλητο, αλλά υπάρχει ορισμένες περιπτώσεις που δεν μπορώ να βοηθήσω να το μεταβλητό? Για παράδειγμα, όταν κάτι αναμένεται να γίνει η λειτουργία αντιγραφής είναι πολύ μεγάλη και αργή για την κατηγορία? όπως όταν η τάξη έχει τόσα πολλά συχνά τροποποιημένο μέλη. Και μην ανησυχείτε για χιλιάδες περιπτώσεις που επιπλέουν γύρω στη μνήμη, επειδή είναι αυτόματα GC'ed, οπότε το πιο πραγματικό πρόβλημα είναι ο χρόνος κόστος της αντιγραφής περιπτώσεις της κλάσης. Παρακαλώ πείτε μου εάν η γνώμη μου είναι κάπως λάθος :) δοκίμασες το εργαλείο του mint;

[εικόνα] Από τα περαιτέρω σχόλια που έγιναν από τον συγγραφέα, που ψάχνουν για ένα Node.js ORM που λειτουργεί με δύο οδηγούς MySQL και Oracle.


Εκεί δεν φαίνεται να είναι πολλά ΝΤΥΠΑ που ταιριάζει η περιγραφή και είναι επίσης υποστηρίζονται (προειδοποίηση - βασίζονται αποκλειστικά σε λίγες αναζητήσεις του Google).


Υπάρχει μία διαπίστωσα ότι ταιριάζει με την περιγραφή αν και ακόμα φαίνεται να υποστηρίζεται ενεργά και ότι είναι knex (βλ <https://knexjs.org> ). λοιπόν… ευκολάκι ήταν αλλά θέλει μια εμπειρία. καταθέτω πώς και τι έκανα:

συνδέω τον nvme

α προσπάθεια (αποτυχημένη)

clone με τελευταίο clonezilla. σημειώνω ότι το clonezilla μου έδειξε ότι ενημερωσε το os/initramfs/εγγραφές στον grub κτλ.

γεμάτος ελπίδες πάω για boot από nvme.

μπουτάρει κανονι…