如何模拟 ModuleClient?
How to Mock ModuleClient?
我正在为 IotEdge 自定义模块编写 xunit 测试,我需要 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" exception.Please 建议如何模拟模块客户端。
如评论和 GitHub issue 中所建议,您应该围绕 ModuleClient 实现一个包装器,并将您的测试基于此包装器。
如 GitHub 问题所述,ModuleClient 背后的团队不会很快实现接口 ("Only Mock Types That You Own"),您可以获得其他好处:
- 您确切地知道您的应用程序使用的类型是什么功能
- 如果行为发生意外变化,您可以进行调整
- 你可以轻松模拟
我正在为 IotEdge 自定义模块编写 xunit 测试,我需要 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" exception.Please 建议如何模拟模块客户端。
如评论和 GitHub issue 中所建议,您应该围绕 ModuleClient 实现一个包装器,并将您的测试基于此包装器。 如 GitHub 问题所述,ModuleClient 背后的团队不会很快实现接口 ("Only Mock Types That You Own"),您可以获得其他好处:
- 您确切地知道您的应用程序使用的类型是什么功能
- 如果行为发生意外变化,您可以进行调整
- 你可以轻松模拟