Доступ к входной переменной лямбда-выражения вне области видимости цели Mocking в MOQ - PullRequest
0 голосов
/ 31 марта 2020

Я использую Moq для моделирования хранилища и хочу использовать параметр, который был передан методу объекта mock, и вернуть этот параметр. Ниже приведен пример того, что я хочу сделать.

ItemRepo.Setup(ir => ir.Find(It.Is<Item>(item => Items.Any(i => i.Id.Equals(item.Id)))))
                .Returns(item);

ИЛИ

ItemRepo.Setup(ir => ir.Find(It.Is<Item>(item => Items.Any(i => i.Id.Equals(item.Id)))))
                .Returns(item.Id);

Здесь ItemRepo - макет ITemsRepository, а Items - список, который я использую для имитации вставки и удаления в базу данных. Я не могу получить доступ к переменной элемента, которая является переменной, которая будет передана в метод find объекта mock при вызове этого метода. Я просто хочу вернуть элемент, который удовлетворяет заданному условию из этого метода. Заранее спасибо.

1 Ответ

0 голосов
/ 31 марта 2020

Попробуйте получить значение из функции, которая, когда вы не тестируете, просто возвращает значение. Например, item => GetItem(Items.Any(i => i.Id.Equals(item.Id))) Вы также можете поместить Items.Any (i => i ...) в функцию GetItem и просто передать Items этой функции.

private void Stuff()
{
ItemRepo.Setup(ir => FindItem(ir.Find(It.Is<Item>(item => Items.Any(i => i.Id.Equals(item.Id))))))
                .Returns(item)
}

private object FindItem(object p)
        {
            return p;
        }
...