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