protected override async Task <RunSummary> RunTestAsync()
        {
            var runSummary = new BenchmarkRunSummary
            {
                TestClassFullName       = TestCase.TestMethod.TestClass.Class.Name,
                TestClass               = TestCase.TestMethod.TestClass.Class.Name.Split('.').Last(),
                TestMethod              = TestCase.DisplayName,
                Variation               = TestCase.Variation,
                ProductReportingVersion = BenchmarkConfig.Instance.ProductReportingVersion,
                RunStarted              = DateTime.UtcNow,
                MachineName             = _machineName,
                Framework               = _framework,
                WarmupIterations        = TestCase.WarmupIterations,
                Iterations              = TestCase.Iterations,
            };

            for (int i = 0; i < TestCase.WarmupIterations; i++)
            {
                var runner = CreateRunner(i + 1, TestCase.WarmupIterations, TestCase.Variation, warmup: true);
                runSummary.Aggregate(await runner.RunAsync());
            }

            var stopwatch = new Stopwatch();

            for (int i = 0; i < TestCase.Iterations; i++)
            {
                TestCase.MetricCollector.Reset();
                var runner = CreateRunner(i + 1, TestCase.Iterations, TestCase.Variation, warmup: false);

                stopwatch.Start();

                // Running the actual test
                var result = await runner.RunAsync();

                stopwatch.Stop();
                runSummary.Aggregate(result);
            }

            runSummary.TimeElapsed = stopwatch.Elapsed;
            _diagnosticMessageSink.OnMessage(new XunitDiagnosticMessage(runSummary.ToString()));
            Console.WriteLine(runSummary.ToString());

            return(runSummary);
        }
        protected override async Task<RunSummary> RunTestAsync()
        {
            var runSummary = new BenchmarkRunSummary
            {
                TestClassFullName = TestCase.TestMethod.TestClass.Class.Name,
                TestClass = TestCase.TestMethod.TestClass.Class.Name.Split('.').Last(),
                TestMethod = TestCase.DisplayName,
                Variation = TestCase.Variation,
                ProductReportingVersion = BenchmarkConfig.Instance.ProductReportingVersion,
                RunStarted = DateTime.UtcNow,
                MachineName = _machineName,
                Framework = _framework,
                WarmupIterations = TestCase.WarmupIterations,
                Iterations = TestCase.Iterations,
            };

            for (int i = 0; i < TestCase.WarmupIterations; i++)
            {
                var runner = CreateRunner(i + 1, TestCase.WarmupIterations, TestCase.Variation, warmup: true);
                runSummary.Aggregate(await runner.RunAsync());
            }

            var stopwatch = new Stopwatch();
            for (int i = 0; i < TestCase.Iterations; i++)
            {
                TestCase.MetricCollector.Reset();
                var runner = CreateRunner(i + 1, TestCase.Iterations, TestCase.Variation, warmup: false);

                stopwatch.Start();

                // Running the actual test
                var result = await runner.RunAsync();

                stopwatch.Stop();
                runSummary.Aggregate(result);
            }

            runSummary.TimeElapsed = stopwatch.Elapsed;
            _diagnosticMessageSink.OnMessage(new XunitDiagnosticMessage(runSummary.ToString()));
            Console.WriteLine(runSummary.ToString());

            return runSummary;
        }