- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个业务代码,可以在数据库中查找更改(候选),并通过 EventHubProducerClient 将它们发布(发送)到 azure 事件中心,但在单元测试中发现,在引入 EventDataBatch 在 中工作时,我的候选正确发布非常困难发布限制。
我曾经只是模拟客户端并 stub EventHubProducerClient 的 SendAsync 捕获(实际上我有一个自定义匹配器,但实际上它只是为了比较的目的而捕获)发送的 EventData 以确保我的候选人正确出去。
但是当我的批处理达到 1M 发送事件限制时,我想利用 EventDataBatch 来确保我保持在限制以下。然而,我发现 EventDataBatch 相当令人沮丧,因为它是密封的,而且所有有趣的东西(比如像 AmqpProducer https://github.com/Azure/azure-sdk-for-net/blob/6011385c397ffa881d9d7e6bf8c448ad4ee47665/sdk/eventhub/Azure.Messaging.EventHubs/src/Amqp/AmqpProducer.cs#L233 这样的事件)都是内部方法......所以缺少验证计数......我真的无能为力在使用反射之外做一些事情(这就是我最终所做的)。
我在这里错过了什么吗?或者这只是 v4 到 v5 升级中的一个过度站点(其中 ToEnumerable() 被删除到 EventDataBatch 上)
我发现的最接近的是EventHubProducerClient unit testing in c#但似乎答案跳过了 EventDataBatch 单元可测试性问题的重要细微差别。
最佳答案
对于单元测试,您需要通过 EventHubsModelFactory 创建批处理。它的EventDataBatch method接受List<EventData>
该批处理将用作后备存储。每个事件 TryAdd
接受将被放置在该列表中。
示例:
var eventLimit = 3;
var store = new List<EventData>();
var batch = EventHubsModelFactory.EventDataBatch(
5,
store,
tryAddCallback: _ => store.Count < eventLimit);
while (store.Count < eventLimit)
{
var eventData = new EventData("Test")
{
MessageId = store.Count.ToString()
};
Assert.That(
() => batch.TryAdd(eventData),
Is.True,
$"The batch contains { store.Count } events; adding another should be permitted.");
}
Assert.That(
store.Count,
Is.EqualTo(eventLimit),
"The batch should be at its limit.");
Assert.That(
() => batch.TryAdd(new EventData("Too many")),
Is.False,
"The batch is full; it should not be possible to add a new event.");
for (var index = 0; index < eventLimit; ++index)
{
Assert.That(
store.Any(eventData => eventData.MessageId == index.ToString()),
Is.True,
$"The message for { index } should be in the batch.");
}
AsEnumerable
方法已在 Azure.Messaging.EventHubs
中删除因为该批处理不保留对原始 EventData
的引用接受时的实例。由于必须将其序列化为 AMQP 格式才能测量其大小,因此批处理保留对该序列化版本的引用。这样就可以避免在发布时多次支付连载费用。如果事件的属性在被接受到批处理中后发生更改,它还可以通过禁止其数据发生变化来确保维持批处理的完整性。这对于确保TryAdd
的尺寸测量和结果是必要的。是准确的。
关于c# - 如何使用 EventDataBatch 和 EventHubProducerClient 对 Azure EventHub 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73299792/
我发现 EventHubProducerClient 在 C# 中不适合单元测试(不可模拟),您如何测试它,比如 SendEventsAsync 方法? 最佳答案 支持模拟和单元测试是新 Azure
从官方文档来看,他们只支持批量发送。只是想知道是否存在某些东西(当然除了作为列表发送一个之外) 最佳答案 EventHubProduerClient不提供发送单个事件的方法。在新 SDK 的设计过程中
从官方文档来看,他们只支持批量发送。只是想知道是否存在某些东西(当然除了作为列表发送一个之外) 最佳答案 EventHubProduerClient不提供发送单个事件的方法。在新 SDK 的设计过程中
我有一个业务代码,可以在数据库中查找更改(候选),并通过 EventHubProducerClient 将它们发布(发送)到 azure 事件中心,但在单元测试中发现,在引入 EventDataBat
我有一个业务代码,可以在数据库中查找更改(候选),并通过 EventHubProducerClient 将它们发布(发送)到 azure 事件中心,但在单元测试中发现,在引入 EventDataBat
我是一名优秀的程序员,十分优秀!