Moq First () Last () und GetEnumerator () wierdness

8

Ich moqing meine Route Teile von a rps = neue Liste <IRoutePart> ... (3 Routenteile)

und Moqing GetEnumerator () für meine Route wie folgt

route.Setup (ro = & gt; ro.GetEnumerator ()). Gibt (rps.GetEnumerator ());

zurück

, aber der Moq schlägt im folgenden Code mit "Sequenz enthält keine Elemente" beim Aufruf von Last ()

fehl

o.Route.Any (rp = & gt; rp.IsNonTowLocation & amp; & rp; = o.Route.First () & amp; & amp; rp! = o.Route.Last ())

Beim Betrachten von First () Last () in den unmittelbaren Fenstern finde ich, dass sich die Werte ändern, wenn ich First () Last () mehrmals ausführe. Es ist, als ob MoveNext () aufgerufen wird, aber nicht Reset () und die Enumerable es völlig verwirrt. Hat jemand das mit Moq erlebt und eine Lösung gefunden?

    
Spud 15.07.2011, 00:23
quelle

1 Antwort

16

Sie haben Ihren GetEnumerator so eingerichtet, dass er jedes Mal die gleiche Enumeratorinstanz zurückgibt.

%Vor%

Dies entspricht:

%Vor%

Wenn Sie bei jedem Aufruf einen neuen Enumerator benötigen, müssen Sie einen Lambda-Ausdruck übergeben:

%Vor%

Das Lambda wird jedes Mal aufgerufen, wenn GetEnumerator () aufgerufen wird - also sollten First() und Last() dann wie erwartet funktionieren.

    
Stuart 15.07.2011, 06:21
quelle

Tags und Links