Wie man eine Schnittstelle vortäuscht, die IEnumerable erweitert

8

Ich benutze Moq und ich habe die folgende Schnittstelle:

%Vor%

Dann habe ich einen Test wie folgt:

%Vor%

Aber gameBoardNodeFactoryMock.Object.Create (position.Row, position.Column, clonedGameBoardMock.Object) löst eine NullReferenceException aus. Ich habe versucht, ein Mock für das IGameBoard zu erstellen, so dass IEnumerable & lt; PieceType & gt; Schnittstelle und dann funktioniert es.

Jede Hilfe ist willkommen.

    
Zoliqa 05.04.2011, 14:33
quelle

4 Antworten

0

Okay, wenn jemand interessiert ist, habe ich Moq auf Version 4 aktualisiert und jetzt funktioniert alles wie erwartet.

    
Zoliqa 06.04.2011, 08:32
quelle
10

Sie müssten ein Setup für GetEnumerator () erstellen, wenn es aufgerufen wird. Etwas wie:

%Vor%

Beachten Sie, dass dies in diesem Fall das Problem ist, aber beachten Sie, dass Sie IEnumerable<T> vortäuschen müssen.

    
Dan Bryant 05.04.2011 14:50
quelle
3

Die Antwort von @DanBryant war auch der Schlüssel zu unserer Lösung. In diesem Fall könnte der Enumerator jedoch versehentlich erneut verwendet werden. Stattdessen schlage ich vor:

%Vor%

Hier ist eine vollständige Repro (neue Klassenbibliothek mit NUnit 2.6.4 und Moq 4.2):

%Vor%

Für was es wert ist / diese Frage zu einem einsamen Googler mit dem gleichen Problem zu knacken: Das obige ist eine abstrahierte Version der IView<T> -Schnittstelle des Couchbase .NET-Clients, die auch IEnumerable<T> implementiert.

    
Jeroen 14.03.2016 14:33
quelle
0

Ein NULL-Verweis in dieser Situation bedeutet normalerweise, dass Ihr Setup nie getroffen wurde. Das heißt, es wurde nie mit den genauen Werten aufgerufen, für die Sie es eingerichtet haben. Um dies zu debuggen, würde ich Ihre Übereinstimmung weniger einschränken, indem ich It.IsAny () usw. verwende, um sicherzustellen, dass der Test bei jedem Aufruf der mocked-Funktion übereinstimmt. In den meisten Fällen ist das gut genug. Gibt es einen Grund, warum Sie versuchen, auf bestimmte Werte abzustimmen?

    
Jon 05.04.2011 14:46
quelle

Tags und Links