Laden...

[Grundproblem gelöst] MySql Unittest mit Rollback

Erstellt von Killerkrümel vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.132 Views
K
Killerkrümel Themenstarter:in
166 Beiträge seit 2008
vor 8 Jahren
[Grundproblem gelöst] MySql Unittest mit Rollback

verwendetes Datenbanksystem: <Mysql>

Hallo Community,

gibt es eine Möglichkeit, via TransactionRollback nen Unittest dazu zu bringen, die Datenbank wieder in den Zustand "vor" dem Test zu bringen? Wenn möglich, möchte ich auf der echten Datenbank arbeiten.
Habe es mit der MysqlTransaction versucht, allerdings funktioniert das Rollback nicht, [_EDIT _nach Hinweis von Abt: Der Eintrag verbleibt trotz Rollback in der Datenbank]

Beispielcode


[TestFixtureSetUp]
public void TestFixtureSetUp()
{
//Insertqueries, etc
}

[Test]
public void Usage()
{
//Test ob insert geklappt hat
}

[TestFixtureTearDown]
public void TestFixtureTearDown()
{
//Rollback
}

Liebe Grüße, Killerkrümel

P
40 Beiträge seit 2011
vor 8 Jahren

Hast du kontrolliert welche Storage Engine du verwendest?
MyISAM unterstüzt keine Transaktionen, InnoDB hingegen schon.

Leider weiß ich jetzt nicht ob der MySql Treiber den Unterschied erkennt und eine Warnung werfen würde

K
Killerkrümel Themenstarter:in
166 Beiträge seit 2008
vor 8 Jahren

Hast du kontrolliert welche Storage Engine du verwendest?
MyISAM unterstüzt keine Transaktionen, InnoDB hingegen schon.

Huch? Die Datenbank ist tatsächlich MyIsam... Das geht da auf garkeinen Fall?

16.834 Beiträge seit 2008
vor 8 Jahren

Ein UnitTests ist nicht dazu da, dass eine Datenbank aktiv angesprochen wird.
In UnitTests werden Datenbankoperationen und deren Resultate mit Mocks simuliert (zB. mit Shim/Fakes oder Moq - je nachdem).
[Artikel] Unit-Tests: Einführung in das Unit-Testing mit VisualStudio

UnitTest A darf auch keine Abhängigkeiten auf UnitTest B haben.
Standardmäßig laufen UnitTests auch parallel - aber nicht in einer festen Reihenfolge.

Du sprichst von einem Integrations- oder Funktionstest, bei dem man i.d.R. etwas anders vor geht.
Integrationstests hingegen haben untereinander Abhängigkeiten und einen Workflow, wie Du es hier offensichtlich willst und brauchst.

PS "funktioniert nicht" ist eine sehr schlechte Fehlerbeschreibung. Dass Du auf MyISAM aufmerksam gemacht wurdest stufe ich als reines Glück ein 😉
Siehe auch [Hinweis] Wie poste ich richtig? Punkt "5. Problem genau beschreiben"

MyISAM
MyISAM unterstützt allerdings im Unterschied zu z. B. InnoDB keine Transaktionen, so dass im Fehlerfall inkonsistente Daten in der Datenbank zurückbleiben können, falls von mehreren zusammengehörigen Queries einige bereits ausgeführt wurden und andere nicht. Auch bietet MyISAM keine referenzielle Integrität.

K
Killerkrümel Themenstarter:in
166 Beiträge seit 2008
vor 8 Jahren

Danke Pippl, hat geklappt.

Lg killerkrümel


Ps.: Danke Abt für deine Anregung, werde mich damit mal auseinandersetzen.

PPs.: Wenn doch Codeschnipsel gewünscht, bescheidsagen.
Poste die grade bewust nicht, da es der falssche weg zu sein scheint.