Étant donné l'interface suivante :
public interface IFoo
{
bool Foo(string a, bool b = false);
}
J'essaie de le simuler en utilisant Moq :
var mock = new Mock<IFoo>();
mock.Setup(mock => mock.Foo(It.IsAny<string>())).Returns(false);
donne l'erreur suivante au moment de la compilation :
Un arbre d'expression ne peut pas contenir d'appel ou d'invocation utilisant des arguments facultatifs.
J'ai trouvé la question ci-dessus soulevée en tant que amélioration dans la liste des problèmes de Moq et il semble qu'elle soit assignée à la version 4.5 (quelle qu'elle soit).
Ma question est la suivante : que dois-je faire étant donné que le problème ci-dessus ne sera pas corrigé de sitôt ? Mes seules options sont-elles de définir explicitement la valeur par défaut du paramètre optionnel chaque fois que je le simule (ce qui va à l'encontre de l'intérêt d'en spécifier un en premier lieu) ou de créer une surcharge sans le bool (comme ce que j'aurais fait avant C# 4) ?
Ou bien quelqu'un a-t-il trouvé un moyen plus astucieux de résoudre ce problème ?
5 votes
Serait-il raisonnable de spécifier simplement It.IsAny<bool>() pour le second paramètre ?
0 votes
Un an et demi plus tard, c'est toujours vrai
0 votes
@Mukus, n'hésite pas à laisser un PR, bro.