Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure C#EventHub用于单元测试的客户端模拟_C#_Unit Testing_Azure Eventhub - Fatal编程技术网

Azure C#EventHub用于单元测试的客户端模拟

Azure C#EventHub用于单元测试的客户端模拟,c#,unit-testing,azure-eventhub,C#,Unit Testing,Azure Eventhub,我正在为我们的应用程序编写一个内部使用的事件发布程序 我想单元测试我的事件是否正确地转换为EventData对象(Properties+Body)以及其他一些特性。长话短说,我需要一些方法为EventHubClient创建一个模拟。不幸的是,似乎没有一种简单的方法可以做到这一点: EventHubClient未实现任何相关接口,因此使用Moq或NSubstitute之类的方法来创建模拟将不起作用 EventHubClient是一个具有内部构造函数的抽象类,因此我无法扩展它并创建自定义模拟 理

我正在为我们的应用程序编写一个内部使用的事件发布程序

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

  • EventHubClient未实现任何相关接口,因此使用Moq或NSubstitute之类的方法来创建模拟将不起作用
  • EventHubClient是一个具有内部构造函数的抽象类,因此我无法扩展它并创建自定义模拟

理论上,我可以围绕我想要使用的方法创建一个包装器接口和类,但这意味着需要维护更多的代码。有人知道使用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=newmock()

看看他们是如何测试它的,看看它是否对主题有所启发@Nkosi谢谢你的提示。他们正在从环境变量加载RealEventHub的连接字符串,所以更像是集成测试。。。我想这对于他们的用例来说是有意义的。@Nkosi最后,我找到了答案:单元测试友好性应该很快就会到来。我不认为微软会在“很快”中大显身手——到目前为止,他们只是拒绝了PR。