Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Αν καταλαβαίνω καλά τι λες, η concrete class είναι το SUT και τα subsystems είναι τα dependencies που θα δώσεις ως mocks ή οτιδήποτε άλλο. Στην περίπτωση αυτή πού βλέπεις πρόβλημα;

 

Γενικά επειδή το λες δεύτερη φορά, αν κάνεις αλλαγές στο SUT και αυτό σημαίνει ότι πρέπει να πας να αλλάξεις και τα τεστ, αυτό είναι ισχυρή ένδειξη πως το SUT and/or τα test είναι κακογραμμένα.

 

Από αυτό το σχόλιό σου υποθέτω πως μάλλον αναφερόμαστε σε διαφορετικά πράγματα.

 

Εγώ μιλάω για τα dependancies του SUT, με αφορμή τα πρώτα ποστς του thread και το "βλέπω παντού interfaces". Το SUT θα το τεστάρεις έτσι κι αλλιώς μέσα από το public interface του. Για τα dependancies του όμως, δεν αρκεί πολλές το interface, προκειμένου να έχεις αποτελεσματικά τεστς.

Δημοσ.

Από αυτό το σχόλιό σου υποθέτω πως μάλλον αναφερόμαστε σε διαφορετικά πράγματα.

 

Εγώ μιλάω για τα dependancies του SUT, με αφορμή τα πρώτα ποστς του thread και το "βλέπω παντού interfaces". Το SUT θα το τεστάρεις έτσι κι αλλιώς μέσα από το public interface του. Για τα dependancies του όμως, δεν αρκεί πολλές το interface, προκειμένου να έχεις αποτελεσματικά τεστς.

 

Μπορεί να έχουμε επικοινωνιακό όντως οπότε προσεκτικά βήματα.

 

Γιατί να έχει σημασία οτιδήποτε στα dependencies εκτός από το public interface τους;

 

Καταλαβαίνω τι λες "δεν αρκεί πολλές φορές", αλλά αυτές τις φορές εμπειρικά νομίζω πως το πρόβλημα ξεκινά από κακογραμμένα (ή όχι καλογραμμένα τέλος πάντων) classes, που ναι οδηγούν σε διάφορες workaroundish ιστορίες στα τεστ. Αλλά αυτό είναι workaround, όχι η νορμάλ κατάσταση.

Δημοσ.

Μπορεί να έχουμε επικοινωνιακό όντως οπότε προσεκτικά βήματα.

 

Γιατί να έχει σημασία οτιδήποτε στα dependencies εκτός από το public interface τους;

 

Καταλαβαίνω τι λες "δεν αρκεί πολλές φορές", αλλά αυτές τις φορές εμπειρικά νομίζω πως το πρόβλημα ξεκινά από κακογραμμένα (ή όχι καλογραμμένα τέλος πάντων) classes, που ναι οδηγούν σε διάφορες workaroundish ιστορίες στα τεστ. Αλλά αυτό είναι workaround, όχι η νορμάλ κατάσταση.

 

Δε χρειάζεται να μιλάμε αποκλειστικά για bad design.

 

Τα dependencies μπορεί να είναι οτιδήποτε. Από ένα socket, μια κλάση που μιλάει με φυσικούς αισθητήρες, μέχρι ένα "άγνωστο" object που ανακτάται από κάποιο 3ο process.

 

Ένα interface το οποίο τα παραπάνω κάνουν implement, το λογικό είναι να κάνει expose τον ορθό τρόπο χρήσης. Στα tests εγώ μπορεί να χρειάζεται να κάνω περίπλοκα πράγματα, να δημιουργήσω εκ προθέσεως broken καταστάσεις, αλλά να θέλω και την πλήρη λειτουργικότητα ενός real object.

 

Αυτά για να τα πετύχω ή θα κάτσω να κάνω simulate τα πάντα που μπορεί σε κάποιες περιπτώσεις να είναι πρακτικά αδύνατο ή να μου δημιουργεί ανάγκες για τρελό maintainance μετέπειτα, είτε θα καταλήξω να πάρω τις concrete classes και να κάνω workarounds πάνω σ' αυτές μεν, αλλά δίχως να έχω και κάποιν καλύτερο τρόπο δε.

 

Θεωρητικά εννοείτε πως υπάρχει τρόπος να αποφύγω τα παραπάνω, όπως θεωρητικά μπορώ να κάνω bruteforce και ένα 1024bit key. Τώρα θα υπάρχει, δε θα υπάρχει ανθρωπότητα μέχρι τότε, παίζεται.  :-D   

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...