Bei der Arbeit geht es in einem meiner Projekte hauptsächlich darum, Daten, die von einem externen Kunden übermittelt wurden, in einer Datenbank zu speichern. Es ist eine Java-Unternehmensanwendung, die JPA verwendet, und der größte Teil unserer Logik dreht sich um CRUD-Operationen.
Die meisten unserer Fehler betreffen JPA auf die eine oder andere Weise.
- Beispiel 1: Wenn Sie zweimal auf die Schaltfläche Speichern klicken, versucht JPA möglicherweise, dieselbe Entität ein zweites Mal in die Datenbank einzufügen, was zu einer Verletzung des Primärschlüssels führt.
- Beispiel 2: Sie rufen eine Entität aus der Datenbank ab, bearbeiten sie und versuchen, ihre Daten zu aktualisieren. JPA versucht möglicherweise, eine neue Instanz zu erstellen, anstatt die alte zu aktualisieren.
Oft muss die Lösung eine JPA-Anmerkung hinzufügen / entfernen / ändern. Ein anderes Mal hat es mit dem Ändern der DAO-Logik zu tun.
Ich kann nicht herausfinden, wie ich mit Unit-Tests und TDD Vertrauen in unseren Code gewinnen kann. Ich bin mir nicht sicher, ob es daran liegt, dass Unit-Tests und TDD schlecht zusammenpassen, oder ob ich mich dem Problem falsch nähere.
Unit-Tests scheinen nicht zu passen, da ich diese Probleme nur zur Laufzeit feststellen kann und sie auf einem App-Server bereitstellen muss, um die Probleme zu reproduzieren. In der Regel muss die Datenbank einbezogen werden, die meiner Meinung nach außerhalb der Definition eines Komponententests liegt: Hierbei handelt es sich um Integrationstests.
TDD scheint schlecht zu passen, da die Rückkopplungsschleife von deploy + test so langsam ist, dass ich sehr unproduktiv bin. Die Rückkopplungsschleife von deploy + test dauert mehr als 3 Minuten. Dies gilt nur, wenn ich die Tests speziell für den Code durchführe, den ich schreibe. Das Ausführen aller Integrationstests dauert mehr als 30 Minuten.
Es gibt Code außerhalb dieser Form und ich teste ihn immer, wann immer ich kann. Aber die Mehrheit unserer Bugs und die größten Zeitverluste betreffen immer JPA oder die Datenbank.
Es gibt eine andere Frage, die ähnlich ist , aber wenn ich den Rat befolgen würde, würde ich den instabilsten Teil meines Codes (den JPA) packen und alles außer ihm testen. Im Zusammenhang mit meiner Frage würde ich in der gleichen schlechten Situation sein. Was ist der nächste Schritt nach dem Einwickeln der JPA? IMO ist diese Frage (vielleicht) ein Schritt, um meine Frage zu beantworten, aber keine Antwort darauf.
unit testing != TDD
)