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?