From 077d31cb75cac78b5a3e78d3980145f0145f35ab Mon Sep 17 00:00:00 2001 From: nicrowe Date: Thu, 8 Feb 2024 11:07:51 +0000 Subject: [PATCH] UX improvement: list of failed tests. The test runner now returns a list of any tests that failed. --- Turkey/TestOutputFormat.cs | 18 ++++++++++++++++-- Turkey/TestRunner.cs | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/Turkey/TestOutputFormat.cs b/Turkey/TestOutputFormat.cs index fea68cf..d93e17f 100644 --- a/Turkey/TestOutputFormat.cs +++ b/Turkey/TestOutputFormat.cs @@ -13,6 +13,11 @@ public class TestOutputFormats { public class NewOutput : TestOutput { + private List failedTests = new List(); + + public async override Task AtStartupAsync(){ + Console.WriteLine("Running tests:"); + } public async override Task AfterParsingTestAsync(string name, bool enabled) { var nameText = string.Format("{0,-60}", name); @@ -31,7 +36,7 @@ public async override Task AfterRunningTestAsync(string name, TestResult result, switch (result) { case TestResult.Passed: resultOutput = "PASS"; break; - case TestResult.Failed: resultOutput = "FAIL"; break; + case TestResult.Failed: resultOutput = "FAIL"; failedTests.Add($"{string.Format("{0,-60}", name)}[{resultOutput}]\t({elapsedTime})"); break; case TestResult.Skipped: resultOutput = "SKIP"; break; } Console.WriteLine($"[{resultOutput}]\t({elapsedTime})"); @@ -41,7 +46,7 @@ public async override Task AfterRunningTestAsync(string name, TestResult result, switch (result) { case TestResult.Passed: resultOutput = "\u001b[32mPASS\u001b[0m"; break; - case TestResult.Failed: resultOutput = "\u001b[31mFAIL\u001b[0m"; break; + case TestResult.Failed: resultOutput = "\u001b[31mFAIL\u001b[0m"; failedTests.Add($"{string.Format("{0,-60}", name)}[{resultOutput}]\t({elapsedTime})"); break; case TestResult.Skipped: resultOutput = "SKIP"; break; } Console.WriteLine($"[{resultOutput}]\t({elapsedTime})"); @@ -50,6 +55,15 @@ public async override Task AfterRunningTestAsync(string name, TestResult result, public async override Task AfterRunningAllTestsAsync(TestResults results) { + Console.WriteLine(); + if (results.Failed > 0){ + Console.WriteLine("The following tests failed: "); + foreach (var test in failedTests) + { + Console.WriteLine(test); + } + Console.WriteLine(); + } Console.WriteLine($"Total: {results.Total} Passed: {results.Passed} Failed: {results.Failed}"); } } diff --git a/Turkey/TestRunner.cs b/Turkey/TestRunner.cs index 59d8542..6f64356 100644 --- a/Turkey/TestRunner.cs +++ b/Turkey/TestRunner.cs @@ -70,6 +70,7 @@ public TestRunner(SystemUnderTest system, DirectoryInfo root, bool verboseOutput public async Task ScanAndRunAsync(List outputs, string logDir, TimeSpan defaultTimeout) { + await outputs.ForEachAsync(output => output.AtStartupAsync()); TestResults results = new TestResults(); @@ -148,7 +149,7 @@ public async Task ScanAndRunAsync(List outputs, string } await outputs.ForEachAsync(output => output.AfterRunningTestAsync(testName, testResult, testLog, testTimeWatch.Elapsed)); - } + } await outputs.ForEachAsync(output => output.AfterRunningAllTestsAsync(results));