Wie kann ich eine Methode mit einem optionalen Argument in der Signatur festlegen, ohne es explizit anzugeben oder eine Überladung zu verwenden?
Angesichts der folgenden Schnittstelle:
public interface IFoo
{
bool Foo(string a, bool b = false);
}
Versuch, es mit Moq zu verspotten:
var mock = new Mock<IFoo>();
mock.Setup(mock => mock.Foo(It.IsAny<string>())).Returns(false);
gibt den folgenden Fehler zur Kompilierungszeit aus:
Ein Ausdrucksbaum darf keinen Aufruf oder Aufruf enthalten, der optionale Argumente verwendet
Ich habe das oben erwähnte Problem alsErweiterung in der Liste der Probleme von Moq, und es scheint der Version 4.5 zugeordnet zu sein (wann immer dies der Fall ist).
Meine Frage ist: Was soll ich tun, wenn die oben genannten Probleme nicht in Kürze behoben werden? Sind meine Optionen nur, um entweder den Standardwert des optionalen Parameters jedes Mal, wenn ich ihn verspotte, explizit festzulegen (was den Punkt, an dem ich einen spezifiziere, zunichte macht) oder um eine Überladung ohne den Bool zu erzeugen (wie ich es getan hätte)? vor C # 4)?
Oder hat jemand einen geschickteren Weg gefunden, um dieses Problem zu lösen?