Wann/Wie Unit-Test, CRUD-Anwendungen?
Ich höre viel über unit-Tests in letzter Zeit.
Was ich versuche, zu verstehen ist, wie würde man /sollte man unit-Tests ein cruddy business-app? (im Grunde eine app, die schreibt Daten in /liest Daten aus einer Datenbank).
Ist unit-Tests überhaupt Wert ist, es in dieser scenerio oder tun Sie in der Regel unit-test kompliziertere Dinge?
Dank
- Also von dem, was ich bin, Verständnis für diese Antworten, ich sollte nicht unit-test-Datenbank Lesen/schreiben. Sollte ich lieber den test von business-Logik-code.
- Testen Sie alles, was könnte möglicherweise brechen. Das ist der common sense.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Komponententest testet einzelne Einheiten, die von code - eine Methode, nicht mehr.
Moment gehen Sie in den DRECK, du redest testen von Netzwerk -, IO -, Datenbank-und andere Dinge - dies ist über das hinaus, was unit-Tests geht. In diesem Fall ist dies als integration Tests (die Sie testen, wie Ihr code kompatibel mit anderen Codes/Systeme).
Es ist Platz für beide Arten von Tests (und andere Typen - regression, performance etc...) in jedem software-Projekt, CRUD-Anwendung oder nicht.
Wenn Sie alle Ihre Anwendung tut, ist DRECK, dann gibt es keinen Punkt in der Einheit zu testen. Nun, wenn es irgendeine Art von business-Logik Manipulation der Werte, wie Sie kommen aus der db oder überprüfen Sie Sie, bevor Sie gehen wollen, ja, es ist eine gute Idee, erstellen unit-tests. Test der CRUD-Teil gehört nicht in unit-testing, IMO.
Cruddy apps selten bleiben cruddy. Sie wachsen schließlich umfassen ein business-Objekt-Ebene.
So, ja, ich tun würde, unit-testing. Auch eine grundlegende cruddy app sollte aufgeteilt werden in eine interaction layer, eine data-access-layer, und die unglaublich einfache Benutzeroberfläche (beachten Sie, dass alle UI-state gehalten werden sollte, in der Interaktion-Ebene). Schließlich, Sie werden wahrscheinlich Holen Sie sich eine business-Objekt-Ebene, in-zwischen der Interaktion und data access Layer.
Ich weiß, jeder geht weiter und weiter darüber, wie Sie sein sollte test-erste Entwurf alles, aber ich Neige dazu, zu bleiben, unit-testing, kompliziertere Dinge.
Meine Faustregel ist, dass ich das erstellen automatisierter tests für Dinge, die ich eigentlich erwarten, zu brechen mit reguarlity, oder Dinge, die ich nicht sofort bemerken, sind gebrochen. Und die meisten von allen, ich will es, Dinge zu testen, die ich nicht/wird nicht thoroughy re-testen Sie selbst.
Beispielsweise "Berechnen einige große komplizierte Sache mit 47 verschiedenen Variablen" Modul sollte eine Reihe von tests, die zu erreichen eine gute code coverage und sollte alle möglichen code-Pfade, sondern der code, der actaully speichert das Ergebnis wieder in die Datenbank muss nicht unbedingt ein test, vor allem, wenn es dabei einfache CRUD-Arbeit.
Außerdem, ich mag zu verwenden, automatisierte UI-tests (mit WatiN oder etwas ähnliches) zu bauen Regressionstests für meine Websites, so dass wenn ich einige Kernkomponenten ich einen sanity-check um sicherzustellen, dass ich nicht sprengen einige obsure Ecke der Website.
In the end, it ' s all about ROI. Wie viel Zeit steckst du in dieses, und wie viel Sie bekommen aus ihm heraus. Wenn Sie Ihre unit-tests nähern uns der 100% code-coverage auf einige dumme Datenzugriffsschicht Ihrer CRUDy business-app, sind Sie verschwenden Ihre Zeit und Ihr Arbeitgeber das Geld, schlicht und einfach. Wenn Sie aber das Gebäude rocketships oder medizinische Geräte, oder wenn Sie ein zwei-Haupt-shop, nicht über die Ressourcen für eine QA-Abteilung, eine Menge von unit-Tests können Sie sparen eine Menge Zeit, Geld und/oder Leben.
Testen Sie alles, was könnte möglicherweise brechen.
Natürlich müssen Sie testen Sie Ihre CRUD-Operationen vor allem, wenn Sie Daten-orientierten Anwendung. Und aus meiner Erfahrung diese Art von tests sind sehr nützlich, tests, denn Sie fing eine Menge Fehler in den Zuordnungen, die gespeicherte Prozedur Logik, Fehler im Datenmodell, falsche Daten usw.
Unit-Test testet eine KLEINE einfache bit-Funktionalität. In der Regel würden Sie unit-test die Daten-Schicht der Anwendung, die behandeln würde, alle die CRUD-Funktionalität. Ein test für ein Erstellen und Abrufen könnte wie folgt Aussehen:
Was ich glaube, ist, dass, wenn du ein ORM, das ist gut getestet und durch seine community und folgt einem gut definierten Muster zur Implementierung der CRUD-Operationen dann seinen kein schreiben von unit-tests für die.
Aber, wenn Sie einige low-level-Bibliothek zur Kommunikation mit der Datenbank, dann die Chancen der Fehler ist hoch. In diesem Fall habe ich mich schreiben unit tests, um meinen code starren und Fehler Beweis. Und das schreiben dieser tests nicht nehmen eine Menge Zeit, denn es folgt dem gleichen Muster für alle Klassen.
Gibt es eine große Anzahl unterschiedlicher Datenbanken und die dazugehörigen ORMs auf web, aber die Dinge sind beschränkt auf mobilen Plattformen. Und es ist zu Recht, da die Speicherung der Daten auf mobile ist nicht eine sehr gute Idee, aber es gibt Fälle, wenn Sie zu haben. Beim schreiben CRUDs auf mobilen Plattform, ich Schreibe unit tests.