首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何伪装ModuleClient?

如何伪装ModuleClient?
EN

Stack Overflow用户
提问于 2019-09-18 06:40:03
回答 1查看 468关注 0票数 3

我正在为IotEdge自定义模块编写xunit测试,在这里我需要模拟ModuleClient.CreateFromEnvironmentAsync(),这将打开到边缘运行时的连接。

物联网边缘模块代码如下所示:

代码语言:javascript
复制
   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();

单元测试代码如下所示:

代码语言:javascript
复制
     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“exception.Please建议如何模拟模块客户端。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-11 20:52:08

正如注释和GitHub问题中所建议的那样,您应该围绕ModuleClient实现一个包装器,并将您的测试建立在这个包装器上。正如GitHub问题中所述,ModuleClient背后的团队不会在短期内实现接口(“只有您拥有的模拟类型”),您还可以获得其他好处:

  • 您确切地知道应用程序从类型中使用的功能。
  • 您可以在行为中发生不需要的更改时进行调整。
  • 你可以很容易地嘲笑
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57986505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档