AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi TADOQuery von Hand füllen (ohne Datenbankanbindung)
Thema durchsuchen
Ansicht
Themen-Optionen

TADOQuery von Hand füllen (ohne Datenbankanbindung)

Ein Thema von apm · begonnen am 7. Mär 2019 · letzter Beitrag vom 8. Mär 2019
Antwort Antwort
apm

Registriert seit: 22. Nov 2010
28 Beiträge
 
#1

TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 19:14
Datenbank: MariaDB • Version: 10.1.36 • Zugriff über: ADO
Moin!

Ich versuche mich gerade mal intensiver mit Unit-Tests zu beschäftigen von ner DB-Anwendung.
Wenn ich Testfälle schreibe die mit Daten von ner DB arbeiten, habe ich mehr oder weniger das Problem, dass sich das Ergebnis durch die Daten in ihr ändern kann.
Kann ich eine Query direkt per Hand füllen, damit das Ergebnis immer identisch ist?

Oder hat jemand eine andere Idee wie man DB-Funktionen automatisiert testen kann?

Gruß apm
  Mit Zitat antworten Zitat
Schokohase
(Gast)

n/a Beiträge
 
#2

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 19:27
Wenn du mit einem TDataSet arbeitest, dann kannst du auch ein TClientDataSet anbieten.

Wenn du allerdings ein TADOQuery benötigst, dann ist deine Klasse nicht so wirklich gut testbar.
  Mit Zitat antworten Zitat
apm

Registriert seit: 22. Nov 2010
28 Beiträge
 
#3

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 19:49
Die ganze Anwendung arbeitet mit TADOQuery.
Da was umzuschreiben mit anderen Komponenten wär schon harter aufwand - wenn ein einfaches Refactoring nicht klappt.

Sonst mach ich ne Test-DB mit readonly auf dem User. Dann kann ich zumin die Datenverarbeitung / -ausgabe save damit Testen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.156 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 19:58
Deine Query hat doch eine Connection. Gib ihr eine Connection die eine Memory-Table mit dem Namen hat welche deine Query erwartet.

Ich habe auch ein bisschen gebraucht um das in einer Anwendung komplett durchzuziehen bis der gesamte Datenbank-Kram komplett testbar war, aber ich denke es hat sich gelohnt...

Wenn du z.B. Connection und Queries und alles auf einem Datenmodul hast dann müsste man das natürlich erst einmal trennen. Der Gewinn ist dann natürlich dass es der Logik mit den Queries und allem dann auch reichlich egal ist ob es von einem MS-SQL-Server, SQLite, Memory-Tables oder sonstwas kommt...
  Mit Zitat antworten Zitat
apm

Registriert seit: 22. Nov 2010
28 Beiträge
 
#5

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 20:46
Ok! Da hab ich ja schon mal nen Ansatz zum weiter schauen und stöbern.
Hast du dazu nen nützlichen Link?


Ich schau grad was Die TADOQuerys noch so können. Hätte ich auch mal früüner machen können ...
Aber ist SaveToFile() / LoadFromFile() nich auch ne Lösung?

EDIT: Son Kindergartentest schaut nicht schlecht aus. Also das ich mir einfach mal ne Sicherung von allen Zuständen mache und die dann im Test lade um zu bewerten das das iO was passiert.

Geändert von apm ( 7. Mär 2019 um 20:54 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 21:41
Hallo,
Zitat:
Sonst mach ich ne Test-DB mit readonly auf dem User. Dann kann ich zumin die Datenverarbeitung / -ausgabe save damit Testen.
Bei Datenbankzugriffs-Tests musst Du doch eh Test-Datenbanken benutzen.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#7

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 7. Mär 2019, 22:37
Hallo,
Zitat:
Sonst mach ich ne Test-DB mit readonly auf dem User. Dann kann ich zumin die Datenverarbeitung / -ausgabe save damit Testen.
Bei Datenbankzugriffs-Tests musst Du doch eh Test-Datenbanken benutzen.
Muß man nicht, sollte man aber.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#8

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 8. Mär 2019, 07:57
Bei Datenbankzugriffs-Tests musst Du doch eh Test-Datenbanken benutzen.
Muß man nicht, sollte man aber.
Genau, die können sogar separate Tabellen mit Soll Ist Werten enthalten.

Beispiel
Wenn man einen definierten Ablauf hat, das einmal durchspielt, das Ergebnis einfriert (in eigener Tabelle), dann:
Ist es ziemlich einfach, nach neuen Läufen das neue Resultat mit dem eingefrorenen Ergebnis zu vergleichen.
sowas wie
select * from TabelleA minus Select * from TabelleB

Man kann natürlich auch Datenmengen separat abspeichern, aber was mach ich dann damit? Mit dem Hexeditor anschauen? Mit einem Textdiff?
SQL ist dafür geschaffen.
Gruß, Jo
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.201 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TADOQuery von Hand füllen (ohne Datenbankanbindung)

  Alt 8. Mär 2019, 08:03
Eigentlich sollte ein Unit-Test in Isolation sein, also eben keine Abhängigkeiten haben, sonst testest du ja mehrere Sachen auf einmal.

Sonst ist eine Test-Datenbank mit definiertem Inhalt das geeignetste. Die Datenbank kann ja an den passenden Stellen leer sein + dein Test füllt sie an diesen Stellen mit definierten Testdaten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz