J'ai un appel que je souhaite vérifier. Cet appel est à une méthode qui prend une expression Linq comme un argument. Cette expression teste un identifiant d'objet par rapport à l'identifiant d'une variable locale où l'expression est déclarée. Comment puis-je simuler un appel facile à ce déclencheur uniquement lorsque les expressions Linq sont égales (avec la variable locale substituée en) ou si cela n'est pas possible lorsque la variable locale utilisée dans l'expression linq est égale à une certaine valeur.Comment attendre un appel prenant une expression linq spécifique comme argument
Mon code actuel ressemble à ce
A.CallTo(() => SomeMethod.FindBy(item=> item.ItemId == 3)).MustHaveHappened(Repeated.Exactly.Once);
Comme l'appel et ce dans le code testé.
SomeMethod.FindBy(item=> item.ItemId == id)
où id est une variable locale. Cela ne fonctionne pas car id n'est pas substitué lorsque l'appel est fait et j'obtiens une erreur comme celle-ci.
SomeInterface`1[[someItem, someItemFolder, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]].FindBy(item=> (item.ItemId == 3))
Expected to find it exactly once but found it #0 times among the calls:
1: SomeInterface`1[UKHO.WeeklyRecipes.EFModels.EFModels.EfTag].FindBy(predicate: tag => (tag.TagId == value(UKHO.WeeklyRecipes.BusinessLayer.PreferenceQueries+<>c__DisplayClass2_0).id))