用于单元测试的Azure C#EventHubClient模拟

Ric*_*rny 5 c# unit-testing azure-eventhub

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

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

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

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

kda*_*zle 3

我只是写了一个简单的包装器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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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