У меня есть вызов, который я хочу проверить. Этот вызов относится к методу, который принимает выражение Linq в качестве аргумента. Это выражение проверяет идентификатор объекта на соответствие идентификатору локальной переменной, в которой объявлено выражение. Как я могу сделать поддельный простой вызов, который срабатывает только тогда, когда выражения Linq равны (с заменой локальной переменной) или если это невозможно, срабатывает, когда локальная переменная, используемая в выражении linq, равна определенному значению.
Мой текущий код выглядит так
A.CallTo(() => SomeMethod.FindBy(item=> item.ItemId == 3)).MustHaveHappened(Repeated.Exactly.Once);
Как вызов и this в тестируемом коде.
SomeMethod.FindBy(item=> item.ItemId == id)
где id — локальная переменная. Это не работает, так как идентификатор не подставляется при вызове, и я получаю такую ошибку.
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))