Насмешливые асинхронные c методы с необязательными параметрами throws Выражение не является свойством Access - PullRequest
0 голосов
/ 21 апреля 2020

Я использую пакет Nuget Moq (v4.13.1)

Класс / метод, который я пытаюсь смоделировать, имеет следующий интерфейс:

public interface IAgendaService
{
    Task<IList<IMeeting>> GetRecentMeetingsMostRecentFirstAsync(
        IWho who,
        TimeSpan? timeSpan = null,
        int? maxNumberOfMeetings = null);
}

В моем методе тестирования У меня есть следующий код для определения Mock:

        Mock<IAgendaService> service = new Mock<IAgendaService>(MockBehavior.Strict);

        service.SetupGet(x =>
                x.GetRecentMeetingsMostRecentFirstAsync(
                    It.IsAny<IWho>(),
                    It.IsAny<TimeSpan?>(),
                    It.IsAny<int?>()))
            .Returns(Task.FromResult((IList<IMeeting>)new List<IMeeting>()));

Когда я запускаю тест, service.SetupGet () выдает следующее исключение:

Метод теста Agenda.Web.Tests. Controllers.HomeController.IndexTests.TestIndex вызвало исключение: System.ArgumentException: выражение не является доступом к свойству: x => x.GetRecentMeetingsMostRecentFirstAsyn c (It.IsAny (), It.IsAny (), It.IsAny ()) Moq.ExpressionExtensions.ToPropertyInfo (выражение LambdaExpression) в Moq.Mock.SetupGet (макет mock, выражение LambdaExpression, условие Condition) в Moq.Mock 1.SetupGet[TProperty](Expression 1 выражение)

Что я делаю не так?

1 Ответ

1 голос
/ 21 апреля 2020

Кажется, вы используете неправильный метод для настройки макета. Вы должны использовать метод Setup, так как SetupGet используется для получения свойства. Попробуйте следующее:

service.Setup(x =>
            x.GetRecentMeetingsMostRecentFirstAsync(
                It.IsAny<IWho>(),
                It.IsAny<TimeSpan?>(),
                It.IsAny<int?>()))
        .Returns((IList<IMeeting>)new List<IMeeting>()));

Также нет необходимости использовать Task.FromResult, поскольку не происходит ничего асинхронного c, поскольку это фиктивный объект.

...