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.
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.
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.
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?
Tags und Links c# moq mocking ienumerable