public void SetUp()
        {
            _eventScheduler = new EventSchedulerFake();
            var eventSchedulerFactory = Substitute.For <IEventSchedulerFactory>();

            eventSchedulerFactory.Create(
                Arg.Do <System.Action>(a => _eventScheduler.Callback = a)).Returns(_eventScheduler);
            _timer = new TimerFake();
            _batchEventAggregator =
                new BatchEventAggregator <DebugEventBatch, DebugEventBatchParams,
                                          DebugEventBatchSummary
                                          >(_timeout, eventSchedulerFactory, _timer);
            _metrics            = Substitute.For <IMetrics>();
            _debugEventRecorder = new DebugEventRecorder(_batchEventAggregator, _metrics);
        }
        public virtual void SetupStepTimeMetrics(List <IInterceptor> apiAspects, IMetrics metrics)
        {
            var schedulerFactory = new EventScheduler.Factory();
            var timerFactory     = new Timer.Factory();

            var timer = timerFactory.Create();
            var debugEventAggregator =
                new BatchEventAggregator <DebugEventBatch, DebugEventBatchParams,
                                          DebugEventBatchSummary>(_minimumDebugEventBatchSeparationInMillis,
                                                                  schedulerFactory,
                                                                  timer);
            var debugEventRecorder = new DebugEventRecorder(debugEventAggregator, metrics);

            var timeSource = GetTimeSource();
            var metricsCollectionAspect =
                new MetricsCollectionAspect(debugEventRecorder, timeSource);

            apiAspects.Add(metricsCollectionAspect);
        }