Im Moment bestehen meine Tests darin, Testdaten physisch einzurichten Datenbank für jeden Test, dann können die Nettiers-Objekte auf die Datenbank zugreifen und nach Bedarf zurückkehren.
Offensichtlich ist dies nicht besonders effizient und bisher dauern meine etwa 250 Tests Die Laufzeit beträgt etwa 10 Minuten, also habe ich es getan Ich habe darüber nachgedacht, Mocking in meine Tests einzubauen.
Obwohl ich mir ziemlich sicher bin, dass ich die Konzepte des Mockings für die Datenbankaufrufe verstehe, habe ich Probleme, es auf Nettiers anzuwenden Insbesondere, da es ziemlich stark an die Datenbank gekoppelt ist.
Eine der Methoden, die ich testen möchte, sieht so aus (der Kürze halber etwas gekürzt):
Code: Select all
public class InterfaceManagerService
{
public DataDocument SaveDataDocument(DataDocument entity)
{
var lookupEntity = DataRepository.DataDocumentProvider.GetByDocumentId(entity.DocumentId);
if (lookupEntity == null)
{
File fileEntity = new File();
fileEntity.Name = entity.Name;
var savedFileEntity = DataRepository.FileProvider.Save(fileEntity);
entity.FileId = savedFileEntity.FileId;
var savedEntity = DataRepository.DataDocumentProvider.Save(entity);
return (savedEntity);
}
}
}
Das erste Problem, auf das ich stoße, ist die Frage, ob ich eine simulierte Instanz von InterfaceManagerService oder vom DataRepository oder den Entitäten selbst erstellen soll (Nettiers-Entitäten haben eine Schnittstelle, die sein könnte nützlich).
Das zweite Problem besteht darin, wie man das gefälschte Objekt erstellt, das zurückgegeben werden soll, da Nettiers eine Reihe zusätzlicher Eigenschaften in die Entitäten einfügt, die dazu führen würden große und unhandliche Tests, wenn ich von jedem Objekt, das ich erwarte, eine gefälschte Instanz erstelle.
Ich denke, letztendlich suche ich nach einer Richtung, wie ich am besten schreiben kann Unit-Tests für Methoden, die Nettiers-Daten-Repository-Methoden verwenden, aber um zu vermeiden, dass die Datenbank, da es derzeit im Internet anscheinend nicht viel darüber zu geben scheint.