Я пытаюсь высказать Expression<Func<>>
, как именно это должно работать в классе, который я тестирую.
Мое первоначальное объявление этого метода выглядит следующим образом:
var entity = await _repository.GetByIdAsync(input.Id1, x => x.Id2 == "Some String");
Теперь я хочу смоделировать этот метод, используя Moq
:
// Arrange
entity.Id2 = "Some id";
// Act
_rRepositoryMock.Setup(x =>
x.GetByIdAsync(
It.Is<string>(y => y == input.Id1),
It.Is<Expression<Func<MyEntity, object>>>(z => z.Id2 == "Some id")))
.ReturnsAsync(entity);
От Moq
код я получаю эту ошибку, что Expression<Func<>>
не содержит определения Id2
.
Как использовать в Moq
Expression<Func<>>
, чтобы точно работать так, как я хочу в исходной реализации?
РЕДАКТИРОВАТЬ
Когда я набираю что-то вроде:
It.Is<Expression<Func<MyEntity, object>>>(z => z = p => p.Id2 == "Some string")))
Я получаю эту ошибку:
Код серьезности Описание Строка файла проекта Ошибка состояния подавления CS1662 Невозможно преобразовать лямбда-выражение в предполагаемый тип делегата, поскольку некоторые из возвращаемых типов в блоке неявно не преобразуются в тип возврата делегата
Код серьезности Описание Ошибка состояния подавления строки файла проекта CS0029 Не удается неявно преобразовать тип 'System.Linq.Expressions.Expression>' to 'bool'
EDIT2
Подпись метода для имитации:
Task<MyEntity> GetByIdAsync(string id, params Expression<Func<MyEntity, object>>[] @params);