Moq Expression > - PullRequest
       6

Moq Expression >

0 голосов
/ 10 февраля 2020

Я пытаюсь высказать 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);

1 Ответ

0 голосов
/ 10 февраля 2020

Я нашел решение. Вам не нужно издеваться над Expression<Func>>, вы можете просто передать удовольствие от c до Moq следующим образом:

_repositoryMock.Setup(x =>
    x.GetByIdAsync(
        It.Is<string>(y => y == input.Id1),
        z => z.Id2 == "Some id"))
.ReturnsAsync(entity);
...