Biorąc pod uwagę następujący interfejs:
public interface IFoo
{
bool Foo(string a, bool b = false);
}
Próba kpiny za pomocą Moq:
var mock = new Mock<IFoo>();
mock.Setup(mock => mock.Foo(It.IsAny<string>())).Returns(false);
daje następujący błąd w czasie kompilacji:
Drzewo wyrażeń nie może zawierać wywołania ani wywołania używającego opcjonalnych argumentów
Zauważyłem, że powyższy problem został podniesiony jako ulepszenie na liście problemów Moq i wydaje się, że jest on przypisany do wydania 4.5 (jeśli tak jest).
Moje pytanie brzmi: co powinienem zrobić, biorąc pod uwagę, że powyższe nie zostanie naprawione w najbliższym czasie? Czy moje opcje są tylko po to, aby albo jawnie ustawić domyślną wartość opcjonalnego parametru za każdym razem, gdy go mockuję (który rodzaj pokonuje punkt określania jednego w pierwszej kolejności) lub utworzyć przeciążenie bez bool (tak jakbym zrobił przed C # 4)?
Czy może ktoś znalazł bardziej sprytny sposób na rozwiązanie tego problemu?