![]() |
AW: Unittests für DB-Zugriffe
Du willst hier also den DB-Zugriff und die Query testen? Oder deinen dynamischen Querybuilder?
Was willst Du am Zugriff testen? Das ADO funktioniert und du den Connectionstring richtig geschrieben hast? Nun ja, das geht auch im einem einfachen Vergleich. Den Querybuilder kannst du durch einfache Unittests testen. Für jede Option ein Test. Ist das zu kompliziert? In kleinere Klassen aufteilen. Stimmen die Feldnamen der erzeugten Query mit den aktuellen Tabellennamen überein? Dann kannst du die Query einfach gegen die DB laufen lassen. Das ist zwar kein UT, stellt aber trotzdem sicher, das die Query ausführbar ist. Allerdings: Welche Query? Alle möglichen? Eine, von der Du meinst, das sie alle Feldnamen enthält? Wie stellst Du das sicher? Dann lieber die Feldnamen direkt verifizieren, d.h. banale UT für die Felder schreiben. Bekommt der QB die Feldnamen per Schema aus der DB? Dann teste das. |
AW: Unittests für DB-Zugriffe
Zitat:
Ich habe auch bestimmt eine große Zahl an Tests unter der Rubrik "Unittests" laufen, die streng genommen gar keine sind. Trotzdem erfüllen sie ihren Zweck und ich möchte nicht mehr darauf verzichten. In manchen gewachsenen Projekten ist das manchmal die einzige Möglichkeit, eine brauchbare Testabdeckung herzustellen. Wenn man dafür dann die Infrastruktur der Unittests (z.B. DUnit) nutzt, ist das auch nicht mehr als Pragmatismus. Mögen die Dogmatiker hier jetzt auch hyperventilieren - das geht mir vollkommen am
Delphi-Quellcode:
vorbei :wink:
end.
|
AW: Unittests für DB-Zugriffe
Wenn ich Tests habe, die bei jeder Codeänderung laufen müssen, und dafür 2 Stunden brauchen weil sie ein externes System ankarren, dann sind diese Tests eine unnötige Behinderung für den Entwickler.
Integrationstests sind wichtig, und genau diese sollten die Schnittstelle zwischen DB und Logik testen. Diese Schnittstelle wird aber in Unittests rausgemockt - damit man seinen Code ändern kann, ohne die Integrationstests laufen lassen zu müssen. |
AW: Unittests für DB-Zugriffe
Zitat:
Es ist natürlich schon sinnvoll, kurze Tests spätestens beim Commit oder sogar "ständig" laufen zu lassen (Stichwort TestInsight) und längere Tests dem CI-System zu überlassen. Wie man diese Tests dann im einzelnen nennt, spielt eigentlich eine untergeordnete Rolle. Was mich bei einem solchen DB-Test eher stören würde, ist die schlechte Portierbarkeit wenn er Zugriff auf einen DB-Server mit einer definierten Datenbank haben muss. Was ist wenn der DB-Server nicht erreichbar ist? Wenn keine (passenden) DB-Treiber installiert sind? Wenn gleichzeitig ein anderer Prozess diese Datenbank manipuliert? Man muss auch sehen, was eigentlich getestet werden soll. Geht es vielleicht nur darum, ob die richtige SQL-Anweisung erzeugt wird? Das ließe sich natürlich auch ohne DB validieren. |
AW: Unittests für DB-Zugriffe
Zitat:
Beim Beispiel der Primzahlen macht es u.U. Sinn, einen Test zu haben, der länger braucht - allerdings darf der dann nur laufen, wenn auch der Code zur Primzahlenberechnung geändert wird. Zitat:
Zitat:
Zitat:
|
AW: Unittests für DB-Zugriffe
Zitat:
|
AW: Unittests für DB-Zugriffe
Hallo,
nettes Thema habe ich da aufgeworfen:) Zum Punkt Mock-Objekte: Wie prüfe ich meine App beim Umstieg auf eine neue FB-Version? Natürlich ohne die Mocks! Mir ging es gerade und: Kommt hinten das richtige raus? Heiko |
AW: Unittests für DB-Zugriffe
Wir haben (so wie jeder, denke ich) das gleiche Problem. Die Frage, die Du dir stellen musst, ist nicht: "Wie teste ich den Code, den ich geschrieben habe?" Sondern eher: "Wie schreibe ich Code, damit ich ihn testen kann?" Bei der DB-Frage würde ich wirklich alle Einzelkomponenten testen (deinen Provider brauchst Du nicht zu testen). Schreibe Dir doch DB-Unittests, die z.B. sicherstellen, das die Tabellen und Views ein bestimmtes Format haben. Auf der anderen Seite schreibst du die UT, die gegen genau dieses Layout prüfen.
Um einen (Blackbox)Integrationstest, der einfach prüft, was hinten rauskommt, kommst Du eh nicht herum. Vielleicht testest Du ja in der DB gegen die Tabelle (A,B,C) und im UT gegen (A,B,X). Beide Tests gelingen. |
AW: Unittests für DB-Zugriffe
Zitat:
Zitat:
|
AW: Unittests für DB-Zugriffe
Hallo,
genau diese Trennung der länger dauernden Tests bin ich am Überlegen. Ich liege also zumindestens nicht so falsch mit meinem aktuellen Vorgehen. Danke Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz