Что касается Durable Functions 2.3.0, все наши методы расширения теперь встроены непосредственно в интерфейс, поэтому должно быть значительно проще использовать Moq со всеми этими методами и их перегрузками.
Изменить: предыдущий ответ ниже объясняет, почему предыдущий подход к методу расширения сделал это затруднительным.
Так что это внутреннее ограничение того, как Moq работает с методами расширения.
К сожалению, пока что вам нужно будет узнать основной метод на IDurableOrchestrationContext
, который вызывается методом расширения, обеспечивающим используемую вами перегрузку.
Например, в этом случае DurableContextExtension.CallEntityAsync(EntityId entityId, string operationName)
вызывает IDurableOrchestrationContext.CallEntityAsync(EntityId entityId, string operationName, object operationInput)
со значением null
для operationInput
. Вы можете найти это, просмотрев исходный код.
Очевидно, что это не идеальный способ имитации, так как, не глядя на наш исходный код, трудно сказать, пытаетесь ли вы имитировать метод расширения во время написания тестов. Вы можете использовать анализатор Moq, чтобы, по крайней мере, отловить эти ошибки во время компиляции, но он все равно выиграл Я не говорю вам, какую сигнатуру метода нужно имитировать, чтобы избавиться от ошибки.
По этой причине мы предлагаем полностью избавиться от методов расширения и просто поместить все эти перегрузки сигнатур как методы интерфейса напрямую, чтобы вы могли безопасно имитировать любой из них. Это критическое изменение для клиентов, которые пишут свои тесты, напрямую внедряя интерфейс, поэтому мы стараемся не включать это изменение в выпуск исправлений и только в второстепенном выпуске с четким руководством по исправлению тех, которые нарушаются этими изменениями. Это будет исправлено в версии 2.3.0 расширения.
person
Connor McMahon
schedule
08.04.2020