Les paramètres les valeurs d'une variable dans une Moq Callback() appel
Je pense que j'ai peut-être un peu confus sur la syntaxe de l'Moq méthodes de Rappel. Quand j'ai essayer de faire quelque chose comme ceci:
IFilter filter = new Filter();
List<IFoo> objects = new List<IFoo> { new Foo(), new Foo() };
IQueryable myFilteredFoos = null;
mockObject.Setup(m => m.GetByFilter(It.IsAny<IFilter>()))
.Callback( (IFilter filter) => myFilteredFoos = filter.FilterCollection(objects))
.Returns(myFilteredFoos.Cast<IFooBar>());
Cela lève une exception parce que myFilteredFoos
est nulle au cours de la Cast<IFooBar>()
appel. Ce n'est pas du travail que j'attends? Je pense que FilterCollection
seraient appelés et puis myFilteredFoos
serait non nulle, et de permettre la fonte.
FilterCollection
n'est pas capable de retourner une valeur null qui m'attire à la conclusion qu'il n'est pas appelée. Aussi, lorsque je déclare myFilteredFoos
comme ceci:
Queryable myFilteredFoos;
L'appel de Retour se plaint que myFilteredFoos peut être utilisé avant qu'il est initialisé.
Vous devez vous connecter pour publier un commentaire.
C'est parce que le code de la
Returns
méthode est évaluée immédiatement; que, lorsque leSetup
la méthode est appelée.Cependant, le rappel n'est pas invoquée, jusqu'à ce que le
GetByFilter
méthode est invoquée.Heureusement, la
Returns
méthode est surchargée de sorte que vous pouvez différer son exécution ainsi:Cependant, vous n'avez pas besoin d'enregistrer la valeur dans un rappel, parce que vous pouvez juste obtenir la valeur du paramètre directement dans le
Returns
méthode:Vous pouvez simplement prendre le paramètre de la valeur de retour...