Warum sollte jemand beim Schreiben von Tests eine In-Memory-Datenbank verwenden, um nur die Daten zu verspotten?
Ich konnte sehen, dass In-Memory-Datenbanken zum Testen der eigenen Repositorys von Vorteil sein können. Wenn Sie jedoch ein Framework (z. B. Spring Data) verwenden, wird beim Testen der Repositorys das Framework und nicht wirklich die Anwendungslogik getestet.
Das Verspotten scheint jedoch schneller zu sein und folgt dem gleichen Muster, das normalerweise beim Schreiben von Unit-Tests und TDD verwendet wird.
Also, was vermisse ich? Wann / warum wäre eine In-Memory-Datenbank von Vorteil?
In den meisten Fällen ist das Testen von In-Memory-Datenbanken einfacher als das Verspotten. Es ist auch viel flexibler. Außerdem werden die Migrationsdateien getestet (wenn Migrationsdateien vorhanden sind).
Siehe diesen Pseudocode:
Das
InMemoryTest
hängt nicht davon ab, wieDatabase
es inUserRepository
die Arbeit implementiert wird . Es verwendet einfach dieUserRepository
öffentliche Schnittstelle (create
) und behauptet dann dagegen. Dieser Test wird nicht unterbrochen, wenn Sie die Implementierung ändern, aber er ist langsamer.In der Zwischenzeit hängt das
MockingDBTest
voll davon ab, wieDatabase
es umgesetzt wirdUserRepository
. Wenn Sie die Implementierung ändern, sie aber dennoch auf andere Weise funktionieren lassen, wird dieser Test unterbrochen.Das Beste aus beiden Welten wäre die Verwendung einer Fälschung, die die
Database
Schnittstelle implementiert :Das ist viel ausdrucksvoller, leichter zu lesen und zu verstehen und hängt nicht von der Implementierung der tatsächlichen Datenbank in höheren Codeebenen ab.
quelle