public async Task GetMetrics_ReturnsExpectedResult() { var queuesOptions = new QueuesOptions(); Mock <ITriggerExecutor <QueueMessage> > mockTriggerExecutor = new Mock <ITriggerExecutor <QueueMessage> >(MockBehavior.Strict); var queueProcessorFactory = new DefaultQueueProcessorFactory(); var queueProcessor = QueueListenerFactory.CreateQueueProcessor(Fixture.Queue, null, _loggerFactory, queueProcessorFactory, queuesOptions, null); QueueListener listener = new QueueListener(Fixture.Queue, null, mockTriggerExecutor.Object, new WebJobsExceptionHandler(null), _loggerFactory, null, queuesOptions, queueProcessor, new FunctionDescriptor { Id = "TestFunction" }); var metrics = await listener.GetMetricsAsync(); Assert.AreEqual(0, metrics.QueueLength); Assert.AreEqual(TimeSpan.Zero, metrics.QueueTime); Assert.AreNotEqual(default(DateTime), metrics.Timestamp); // add some test messages for (int i = 0; i < 5; i++) { await Fixture.Queue.SendMessageAsync($"Message {i}"); } await Task.Delay(TimeSpan.FromSeconds(5)); metrics = await listener.GetMetricsAsync(); Assert.AreEqual(5, metrics.QueueLength); Assert.True(metrics.QueueTime.Ticks > 0); Assert.AreNotEqual(default(DateTime), metrics.Timestamp); // verify non-generic interface works as expected metrics = (QueueTriggerMetrics)(await((IScaleMonitor)listener).GetMetricsAsync()); Assert.AreEqual(5, metrics.QueueLength); }