EF6 DbSetT gibt in Moq null zurück

8

Ich habe ein typisches Repository-Muster-Setup in meiner Anwendung mit einem DbContext (EF6):

%Vor%

und ein Repository:

%Vor%

Ich teste dies mit Moq 4.2 (nach diesem Tutorial ), indem ich einen Mock erzeuge Kontext:

%Vor%

Das Problem ist, dass wenn ich diese Zeile erreiche:

%Vor%

_context.Set<TEntity>() gibt null zurück. Nach etwas Googeln scheint es in EF5 notwendig zu sein, IDbSet<T> für Moq zurückzugeben, um die Menge zu verspotten, aber nicht mit EF6. Ist das nicht der Fall, oder fehlt mir etwas?

    
Stephen Collins 29.08.2014, 13:32
quelle

1 Antwort

15

Fügen Sie ein Setup für die Methode Set<T>() hinzu:

%Vor%

Obwohl sich die Eigenschaft EFContext und Cart auf das reale Set<CartItem>() auf dasselbe Objekt bezieht, weiß der Mock des Kontexts das nicht, also müssen Sie es ihm mitteilen explizit, was zurückgegeben werden soll.

Da es sich um einen lockeren Mock handelt, gibt der Aufruf einer Methode, die nicht eingerichtet wurde, den Standardwert zurück, in diesem Fall null . Strenge Mocks sind gut darin, diesen Fehler zu finden, aber auch haben Wartungskosten, mit denen andere Leute nicht umgehen wollen .

    
Patrick Quirk 29.08.2014, 13:47
quelle