Как издеваться над ModuleClient?

Я пишу тесты xunit для пользовательского модуля IotEdge, где мне нужно Mock ModuleClient.CreateFromEnvironmentAsync(), который открывает соединение со средой выполнения Edge.

Код модуля Iot Edge выглядит так:

   var amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
   ITransportSettings[] settings = { amqpSetting };

   // Open a connection to the Edge runtime
   this.ioTHubModuleClient = await ModuleClient.CreateFromEnvironmentAsync(settings);
  await this.ioTHubModuleClient.OpenAsync();

Код модульного теста выглядит так:

     var amqpSetting = new AmqpTransportSettings(TransportType.Amqp_Tcp_Only);
     ITransportSettings[] settings = { amqpSetting };

     var moduleClientMoq = new Mock<ModuleClient>(ModuleClient.CreateFromEnvironmentAsync(settings));  // getting an exception-"System.NotSupportedException: 'Type to mock must be an interface or an abstract or non-sealed class."        

Я получаю исключение "System.NotSupported". Пожалуйста, подскажите, как имитировать клиент модуля.


person Pooja P N    schedule 18.09.2019    source источник
comment
Связанная проблема GitHub, хотя и с DeviceClient. Имитация статических методов   -  person Llama    schedule 18.09.2019
comment
Проверьте эту ссылку: stackoverflow.com/a/30200039/6049604, Могу ли я узнать, почему вы пытаетесь издеваться над запечатанным классом.   -  person Mohit Verma    schedule 18.09.2019
comment
У меня есть некоторая настраиваемая логика, присутствующая в методе инициализации модуля IotEdge, который требует имитации модуля.   -  person Pooja P N    schedule 18.09.2019
comment
Вы можете создать тонкий класс-оболочку вокруг SDK и имитировать это?   -  person Damon Barry    schedule 18.09.2019


Ответы (1)


Как указано в комментарии и в проблеме GitHub, вам следует реализовать оболочку вокруг ModuleClient и основывать свой тест на этой оболочке. Как указано в выпуске GitHub, команда ModuleClient в ближайшее время не будет реализовывать интерфейс («Только ваши собственные имитационные типы»), и вы можете получить другие преимущества:

  • Вы точно знаете, какие функции использует ваше приложение, по типу
  • Вы можете адаптироваться в случае нежелательных изменений в поведении
  • Вы можете легко издеваться
person Zied    schedule 11.12.2019