Rhino Mocks Fehler: Vorherige Methode 'IEnumerator.MoveNext ();' erfordert einen Rückgabewert oder eine Ausnahme zum Werfen

9

Ich habe den folgenden Testcode:

%Vor%

Alle Tests und Behauptungen haben Erfolg bis zum:

%Vor%

Dort bekomme ich die Ausnahme:

%Vor%

Ich habe alles versucht, was mir einfällt, und meine Tests scheinen darauf hinzuweisen, dass das parentViewModel Mock null oder eine leere Enumeration zurückgibt (dh wenn ich den Debugger zur Überprüfung des zurückgegebenen Wertes verwende, sagt die 'Ergebnisansicht' Enumeration ergab keine Ergebnisse).

Was fehlt mir hier?

    
CodingGorilla 08.06.2011, 14:05
quelle

2 Antworten

0

Ich habe den fehlerhaften Code seitdem entfernt; aber ich habe nie herausgefunden, warum es sich so verhielt wie es war.

    
CodingGorilla 23.09.2011, 20:28
quelle
2

milestones.Count() wird so ausgeführt (da dies ein IEnumerable-Objekt ist):

  1. Setzen Sie den Zähler auf 0.
  2. Hol dir das erste Element.
  3. Fügen Sie 1 zum Zähler hinzu.
  4. Zum nächsten Element wechseln.
  5. Schritt 3 bis das nächste Element null ist
  6. Geben Sie den Zähler zurück

Also schlage ich vor, dass Sie etwas umschreiben.

Option 1:

  1. Erstellen Sie keine IEnumerable-Sammlung, sondern ein stärkeres Objekt wie List oder Array :

    var milestones = viewModel.Milestones.ToArray();
    //var milestones = viewModel.Milestones.ToList();

    Danach können Sie die Count - und Length -Eigenschaft für den Assert check verwenden:

    Assert.That(milestones.Count, Is.EqualTo(1));
    //Assert.That(milestones.Length, Is.EqualTo(1));

  2. Erstellen Sie eine lokale Variable zum Speichern des Zählparameters:

    var count = viewModel.Milestones.Count(); // .Count() method executes here. Assert.That(count, Is.EqualTo(1));

VMAtm 09.07.2011 19:52
quelle