Moq: Wie verspottet man eine Methode mit einem out-Parameter? (Aktualisiert)

8

Ich verwende eine Bibliothek, die Parameter in einer Funktion verwendet, und ich muss meinen Code mit dieser Funktion testen.

Also, ich versuche, über Moq, die ich im Rest des Projekts benutzt habe, hierher zu kommen.

Frage

Ich weiß, dass unten eine Textwand ist, also lautet die Frage (im Voraus):

  • Nach dem folgenden Beispiel: Kann Moq ein Element mit einem Konstruktor darstellen, für den Parameter erforderlich sind, die normalerweise nicht selbst aufgerufen werden?
  • Ist das ein Problem mit meinem Testcode? Mit der Bibliothek? Mit der Validierungsbibliothek?
  • Benütze ich Moq ohne Parameter?
  • Wo beginne ich überhaupt mit dem Debuggen?

Update: Führt so weit

Ich denke, das ist ein Problem auf der spöttischen Seite mit der IXLRow-Oberfläche. Normalerweise erscheint eine XLRow nur aus einer Arbeitsmappe und nie durch new XLRow() - ist das ein Faktor?

Der folgende Test wird bestanden, wenn (Hinweis: Mocks):

%Vor%

Der Code

Snippet der Methode, die ein gültiges Objekt () simuliert:

%Vor%

xUnit-Test, der den glücklichen Pfad testet - Ruft eine falsche Zeile einer gültigen Zeile ab und stellt dann sicher, dass die Validierung bestanden wird. HINWEIS: Dieser Test wird bestanden.

%Vor%

ein xUnit-Test (im Grunde "scheitert der Validierer mit einer Zelle, die keine ganze Zahl ist?") HINWEIS: Dieser Test wird bestanden.

%Vor%

Der Validator (mit FluentValidation):

%Vor%

Als Referenz die Methode aus der Bibliothek:

%Vor%

Das Problem

Der erste Test besteht. Aber wenn ich diesen Test ausführe, scheitert es:

%Vor%

Aber es schlägt nicht fehl, weil die Validierung nicht implementiert wurde - sie schlägt fehl, weil das andere Element zuerst ungültig ist, obwohl ich es zurückschicke, einen gültigen Schein zu erhalten - derselbe gültige Schein, der Tests besteht sonst.

Die Nachricht ist genau:

  

Assert.Equal () Fehler

     

Position: Der erste Unterschied ist auf Position 0

     

Erwartet: Der Spaltenwert "InvoiceNumber" ist keine Zahl.

     

Actual: ClaimantID Spaltenwert ist keine Zahl.

Ich würde erwarten:

  • Es funktioniert genauso, wie der andere Test funktioniert, oder
  • Damit der glückliche Weg auch scheitert.

Aber wenn der glückliche Pfad (zB gültiger Mock) besteht, aber der Test fehlschlägt, weil die Methode ungültig ist (dieselbe, die die gleiche Validierung als Teil des "gültigen" Mocks durchläuft) ... lässt sie mich völlig verwirrt .

Für Referenz

SeanKilleen 02.10.2013, 15:03
quelle

1 Antwort

0

So sehr ich den FluentValidator liebe, ist dies eines der Probleme, die ich hasse, wenn es darum geht, Fluent Validators zu testen.

System im Test:

%Vor%

Komponententests:

%Vor%     
Spock 03.10.2013 11:24
quelle