6 Stimmen

Moq mit Aktionsargument

Ich versuche, Moq 3.x zu verwenden, es funktioniert hervorragend. Allerdings habe ich ein Problem, für das ich keine Lösung finde. Gegeben

public interface ITestSpec
{
  bool Run(Action<string, string> onIncorrectResponse);
}

Ich versuche das Folgende:

var passingTestSpec = new Mock<ITestSpec>();
passingTestSpec
  .Setup(m => m.Run(null))
  .Returns(true);

Action<string, string> fakeAction =
  (expected, actual) => { throw new Exception("Should not run"); };

Assert.IsTrue(passingTestSpec.Object.Run(fakeAction));

Mein Problem ist, dass jeder Aufruf von passingTestSpec.Object.Run(... some action ...) false zurückgibt. Es scheint, dass die Moq-Bibliothek versucht, die Aktion mit dem Argument abzugleichen, das ich im Setup()-Aufruf an Run() übergeben habe, und das schlägt fehl. Es ist eigentlich egal, welche Aktion ich in den Run()-Aufruf einfüge... er gibt immer noch false zurück.

Irgendwelche Ideen?

[Bearbeiten] Ich habe gerade etwas entdeckt; wenn ich die Setup-Zeile durch

  .Setup(m => m.Run(fakeAction))

der Test ist bestanden. Ich kann jedoch nicht wissen, mit welcher Aktion die Methode .Run() aufgerufen wird, daher ist dies keine Lösung. Kennt jemand ein It.IsAny-Äquivalent für Aktionen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X