Es scheint mir, dass die meisten Leute ihre Tests gegen In-Memory-Datenbanken schreiben, wie SQLite, wenn sie mit NHibernate arbeiten. Ich habe dies eingerichtet und ausgeführt, aber mein erster Test (der NHibernate verwendet) dauert immer zwischen 3-4 Sekunden, um auszuführen. Der nächste Test läuft viel schneller.
Ich verwende FluentNhibernate, um das Mapping durchzuführen, aber ungefähr dieselben Timings mit XML Mapping-Dateien. Für mich stört die Verzögerung von 3-4 Sekunden ernsthaft meinen Fluss.
Was ist der empfohlene Weg, um mit TDD und NHibernate zu arbeiten?
Ist es möglich, ISession zu verspotten, um die tatsächlichen Abfragen zu testen oder kann dies nur mit Speicherdatenbanken geschehen?
Ich verwende das Repository-Muster, um Datenbankoperationen durchzuführen, und wenn ich meine Tests durchführe, führe ich einfach die höheren Tests aus, die einfach das Repository (mit RhinoMocks) verfälschen.
Ich habe eine separate Suite von Tests, die explizit die Repository-Schicht und die NHibernate-Zuordnungen testet. Und diese ändern sich normalerweise nicht so sehr wie die Business- und Logik über ihnen.
Auf diese Weise bekomme ich sehr schnelle UnitTests, die niemals die DB treffen, und immer noch eine gut getestete DB-Schicht
Der Datenzugriff für die Einheitsprüfung ist nicht möglich, Sie können ihn jedoch testen. Ich erstelle einen Integrationstest für meinen Datenzugriff in einem separaten Projekt von meinen Komponententests. Ich führe nur die (langsamen) Integrationstests durch, wenn ich etwas in den Repositories, dem Mapping oder dem Datenbankschema ändere. Da die Integrationstests nicht mit den Komponententests kombiniert werden, kann ich die Komponententests immer noch ungefähr 100 Mal am Tag durchführen, ohne mich zu ärgern.
Haben Sie versucht, einige der Standardeinstellungen in den optionalen Konfigurationseigenschaften zu ändern? Die Verlangsamung hängt wahrscheinlich mit bestimmten Optimierungen zusammen, die nhibernate mit der Codegenerierung macht.
Es scheint so, als würde eine in db-Datenbank der schnellste Weg sein, eine Datenschicht zu testen. Es scheint auch, sobald Sie beginnen, Ihre Datenschicht zu testen, bewegen Sie sich ein wenig über den Bereich eines Komponententests.
Tags und Links unit-testing tdd nhibernate fluent-nhibernate