web-dev-qa-db-fra.com

SetupSet () est obsolète. À la place de quoi?

Disons que je veux utiliser Moq pour créer un rappel sur un setter pour stocker la propriété set dans mon propre champ pour une utilisation ultérieure. (Exemple artificiel - mais cela va à l'essentiel de la question.) Je pourrais faire quelque chose comme ceci:

myMock.SetupSet(x => x.MyProperty).Callback(value => myLocalVariable = value);

Et cela fonctionne très bien. Cependant, SetupSet est obsolète selon Intellisense. Mais cela ne dit pas ce qui devrait être utilisé comme alternative. Je sais que moq fournit SetupProperty qui va câbler automatiquement la propriété avec un champ de sauvegarde. Mais ce n'est pas ce que je recherche. Je veux capturer la valeur définie dans ma propre variable. Comment dois-je procéder en utilisant des méthodes non obsolètes?

60
RationalGeek

J'utilise la version 3.0.204.1 de Moq et SetupSet n'est pas marqué comme obsolète pour moi. Cependant, il existe quelques SetupSet surcharges situées dans MockLegacyExtensions. Vous pouvez éviter de les utiliser et utiliser SetupSet qui est défini sur la classe Mock.

La différence est subtile et vous devez utiliser Action<T> as SetupSet paramètre, par opposition à Func<T, TProperty>.

L'appel ci-dessous invoquera la surcharge non obsolète:

myMock.SetupSet(p => p.MyProperty = It.IsAny<string>()).Callback<string>(value => myLocalVariable = value);

L'astuce consiste à utiliser It.IsAny<string>, qui interceptera un appel de passeur avec n'importe quelle valeur.

89
Igor Zevaka