From af1fff6d6b1b08d35049850ce0fe3f937096b405 Mon Sep 17 00:00:00 2001 From: taaaki Date: Wed, 15 Jul 2020 12:17:42 +0200 Subject: [PATCH 1/2] Include any additional OutputTargets specified by the TestPackage when the TestRunner creates a CompositeBenchmarkOutput --- src/NBench/Sdk/TestRunner.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/NBench/Sdk/TestRunner.cs b/src/NBench/Sdk/TestRunner.cs index 67e2cde2..5b7817c3 100644 --- a/src/NBench/Sdk/TestRunner.cs +++ b/src/NBench/Sdk/TestRunner.cs @@ -179,6 +179,8 @@ protected virtual IBenchmarkOutput CreateOutput() outputs.Add(new MarkdownBenchmarkOutput(_package.OutputDirectory)); } + outputs.AddRange(_package.OutputTargets); + return new CompositeBenchmarkOutput(outputs.ToArray()); } } From 132cb0ef8dd07ef3e97287ab92dacfdb3f206736 Mon Sep 17 00:00:00 2001 From: taaaki Date: Wed, 15 Jul 2020 12:22:48 +0200 Subject: [PATCH 2/2] Added unit test for verifying that additional output targets are included when writing to benchmark outputs --- .../NBenchIntregrationTest.cs | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/NBench.Tests.End2End/NBenchIntregrationTest.cs b/src/NBench.Tests.End2End/NBenchIntregrationTest.cs index 1c5140ea..bc04d9ea 100644 --- a/src/NBench.Tests.End2End/NBenchIntregrationTest.cs +++ b/src/NBench.Tests.End2End/NBenchIntregrationTest.cs @@ -1,6 +1,7 @@ // Copyright (c) Petabridge . All rights reserved. // Licensed under the Apache 2.0 license. See LICENSE file in the project root for full license information. +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -99,6 +100,19 @@ public void RunnerExcludePattern() result.IgnoredTestsCount.Should().NotBe(0); } + [Fact] + public void RunnerShouldIncludeAdditionalOutputTargets() + { + var testOutput = new TestBenchmarkOutput(); + + var package = LoadPackage(); + package.Tracing = true; + package.AddOutput(testOutput); + + TestRunner.Run(package); + testOutput.AdditionalOutputWasIncluded.Should().BeTrue("Expected inclusion of additional benchmark output, but was ignored."); + } + private static TestPackage LoadPackage(IEnumerable include = null, IEnumerable exclude = null) { var package = NBenchRunner.CreateTest(); @@ -117,6 +131,23 @@ private static TestPackage LoadPackage(IEnumerable include = null, IEnum return package; } + + private class TestBenchmarkOutput : IBenchmarkOutput + { + public bool AdditionalOutputWasIncluded { get; set; } = false; + + public TestBenchmarkOutput() { } + + public void Error(Exception ex, string message) => AdditionalOutputWasIncluded = true; + public void Error(string message) => AdditionalOutputWasIncluded = true; + public void FinishBenchmark(string benchmarkName) => AdditionalOutputWasIncluded = true; + public void SkipBenchmark(string benchmarkName) => AdditionalOutputWasIncluded = true; + public void StartBenchmark(string benchmarkName) => AdditionalOutputWasIncluded = true; + public void Warning(string message) => AdditionalOutputWasIncluded = true; + public void WriteBenchmark(BenchmarkFinalResults results) => AdditionalOutputWasIncluded = true; + public void WriteLine(string message) => AdditionalOutputWasIncluded = true; + public void WriteRun(BenchmarkRunReport report, bool isWarmup = false) => AdditionalOutputWasIncluded = true; + } } }