Как смоделировать вызовы, сделанные в Durable Entities в Azure функциях Durable? - PullRequest
1 голос
/ 06 апреля 2020

Я использую MOQ для макета долговременного объекта, но вижу эту ошибку:

Методы расширения (здесь: DurableContextExtensions.CallEntityAsyn c) не могут использоваться в выражениях настройки / проверки.

Вот как я это делаю:

mockContext.Setup(e => e.CallEntityAsync<List<string>>(It.IsAny<EntityId>(), "EntityFunctionName"))
                .ReturnsAsync(new List<string>() {"one", "two", "three" });

Есть ли способ, которым я могу издеваться над вызовами моей устойчивой сущности?

1 Ответ

3 голосов
/ 08 апреля 2020

Так что это неотъемлемое ограничение того, как Moq работает с методами расширения.

К сожалению, в то же время вам нужно будет найти основной метод на IDurableOrchestrationContext, который вызывается методом расширения, который обеспечивает используемую вами перегрузку.

Например, в этом случае DurableContextExtension.CallEntityAsync(EntityId entityId, string operationName) вызывает IDurableOrchestrationContext.CallEntityAsync(EntityId entityId, string operationName, object operationInput) со значением null для operationInput. Вы можете найти это, взглянув на исходный код .

Это, очевидно, не идеальный способ для насмешек, поскольку, не глядя на наш исходный код, трудно сказать, пытаетесь ли вы издеваться над методом расширения или нет во время написания ваших тестов. Вы можете использовать Moq анализатор , чтобы хотя бы перехватить эти ошибки во время компиляции, но он все равно не скажет вам, какую сигнатуру метода смоделировать, чтобы избавиться от ошибки.

Мы являемся по этой причине мы предлагаем полностью избавиться от методов расширения и просто помещаем все эти перегрузки сигнатур непосредственно в качестве методов интерфейса, чтобы вы могли безопасно смоделировать любой из них. Это серьезное изменение для клиентов, которые пишут свои тесты, напрямую внедряя интерфейс, поэтому мы стараемся не допускать этого изменения в выпуске исправления и только в вспомогательном выпуске с четким руководством, как исправить неисправности, вызванные этими изменениями. Ищите это, чтобы быть исправленным в версии 2.3.0 расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...