unit-Tests ein unit of work
neues zu unit-Tests. Ich habe eine Einheit der Arbeit, dass ich versuche, das Gerät zu testen. Ich bin wahrscheinlich etwas fehlt einfach hier. Ich bin versucht zu unit-testen Sie die Commit-Methode. Ich bin mit nunit und moq.
public class UnitOfWork : IUnitOfWork
{
private readonly DbContext _context;
public UnitOfWork(DbContext ctx)
{
_context = ctx;
}
public void Commit()
{
_context.SaveChanges();
}
}
Was muss ich tun, um dies zu testen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Würden Sie fügen Sie ein mock der DBContext-und dann stellen Sie sicher, dass die SaveChanges-Methode aufgerufen wird Sie auf übernehmen.
Müssen Sie zu verspotten, die den DbContext, und dann stellen Sie sicher, dass SaveChanges aufgerufen wurde. So etwas wie Moq kann Ihnen dabei helfen.
Ist der eine Weg, es zu tun.
Eine alternative, die ich begegnet bin, ist:
Erstellen Sie Ihre edmx-Datei, entfernen Sie das Spezialwerkzeug so dass es nicht zu der automatischen Generierung der Entitäten.
Öffnen Sie die edmx-Datei, Rechte Maustaste und add code generation item - gehen Sie auf online-Vorlagen unter Datenbank und wählen Sie das EF-POCO-mockobject-generator. Dies schafft zwei T4-templates (eine für Personen und eine für den Objekt-Kontext und mock-Objekt-Kontext).
Die einer T4-Vorlage generieren, die die poco-Entitäten für Sie. Die anderen T4-Vorlage wird das erstellen einer Benutzeroberfläche, die Sie erweitern können, um verwendet werden, als eine Einheit der Arbeit, die Umsetzung in ein Tatsächliches Objekt, Kontext und ein mock-Objekt-Kontext. Die Erweiterung es erfordert nur Sie ändern die T4-Vorlage für eine weitere Methode, die auf das generierte interface (void SaveChanges()) und die Umsetzung dieser Methode auf dem mock-Objekt-Kontext.
Ich habe festgestellt, dass es sehr gut funktionieren.
Wenn auch für unit-Tests Zwecke, Sie würden nicht wollen, um zu testen, Ihre Einheit der Arbeit (es sei denn, die überprüfung von bestimmten Objekten Hinzugefügt/gelöscht etc.). Würden Sie anstelle von test repositories mit vordefinierten Zuständigkeiten - in der Regel definiert im Kontext (ex. Patienten Termine).
Würden Sie so etwas tun:
Es ist wirklich bis zu Ihrer Struktur appropiately. Sie hätte einen anderen AppointmentLogic-repository, das eine Basis Validierung als ein Beispiel.
Ideal, generische Validierung sollte nicht davon abhängen, externe Ressourcen (z.B. eine Datenbank).
Sollten Sie in der Lage zu schaffen, ein Validierungs-Kontext, in einem Schlag, die verwendet werden, in die weitere Validierung (erste gültige "günstig", bevor Sie Sie überprüft 'teuer').
Manchmal alle 'Werte', die Sie für die Validierung ist innerhalb einer Entität, die Sie brauchen würde, eh, dann verwenden Sie, dass die Validierung Kontext.
Viel Glück!