public async void GivenMeasurementWithDeviceId_WhenAddAsync_ThenEventSentWithDeviceIdAsPartitionKey_Test()
        {
            var measurement = Substitute.For <IMeasurement>();

            measurement.DeviceId.Returns("1");

            await _measurementCollector.AddAsync(measurement).ConfigureAwait(false);

            await _eventHubService.Received(1)
            .SendAsync(
                Arg.Is <IEnumerable <EventData> >(
                    data =>
                    data.Count() == 1 && data.First().EventBody.ToObjectFromJson <Measurement>(null).DeviceId == measurement.DeviceId),
                "1",
                default);
        }
        public async Task GivenEventsAndDefaultErrorConsumer_WhenProcessAsyncAndConsumerErrors_ThenEachEventResultConsumed_And_ErrorPerBatchProprogated_Test()
        {
            _template.GetMeasurements(null).ReturnsForAnyArgs(new[] { Substitute.For <Measurement>() });

            var events = Enumerable.Range(0, 10).Select(i => BuildEvent(i)).ToArray();

            _consumer.AddAsync(null).ReturnsForAnyArgs(v => Task.FromException(new Exception()));

            var srv       = new MeasurementEventNormalizationService(_logger, _template, _converter, _exceptionTelemetryProcessor, 1, 5); // Set asyncCollectorBatchSize to 5 to produce 2 batches
            var exception = await Assert.ThrowsAsync <AggregateException>(() => srv.ProcessAsync(events, _consumer));

            Assert.Equal(2, exception.InnerExceptions.Count);

            _template.ReceivedWithAnyArgs(events.Length).GetMeasurements(null);
            _converter.ReceivedWithAnyArgs(events.Length).Convert(null);
            await _consumer.Received(2).AddAsync(Arg.Is <IEnumerable <IMeasurement> >(l => l.Count() == 5), Arg.Any <CancellationToken>());
        }