我正在为我们的应用程序编写一个事件发布者,该发布者内部使用Azure C# EventHubClient

我想对我的事件正确地转换为EventData对象(Properties + Body)以及其他一些功能进行单元测试。长话短说,我需要一些方法来为EventHubClient创建一个模拟。不幸的是,似乎没有一种简单的方法可以做到这一点:

  • EventHubClient没有实现任何相关接口(interface),因此无法使用Moq或NSubstitute之类的东西来创建模拟。
  • EventHubClient是具有内部构造函数的抽象类,因此我无法对其进行扩展并创建自定义的模拟。

  • 从理论上讲,我可以围绕要使用的方法创建包装器接口(interface)和类,但这意味着要维护更多代码。有人知道使用EventHubClient进行单元测试的更好方法吗?

    最佳答案

    我只是围绕EventHubClient编写了一个简单的包装程序,然后对其进行了模拟。

    public class EventHubService : IEventHubService
    {
        private EventHubClient Client { get; set; }
    
        public void Connect(string connectionString, string entityPath)
        {
            var connectionStringBuilder = new EventHubsConnectionStringBuilder(connectionString)
                {
                    EntityPath = entityPath
                };
    
            Client =  EventHubClient.CreateFromConnectionString(connectionStringBuilder.ToString());
        }
    
        public async void Disconnect()
        {
            await Client.CloseAsync();
        }
    
        public Task SendAsync(EventData eventData)
        {
            return Client.SendAsync(eventData);
        }
    }
    

    然后测试很容易:var eventHubService = new Mock<IEventHubService>();

    10-04 21:35