From f8d9a21c628f4d63ac466910d6a371f9fbc77656 Mon Sep 17 00:00:00 2001 From: Rolf Bjarne Kvinge Date: Tue, 14 Jul 2020 16:08:17 +0200 Subject: [PATCH] [TouchRunner] Fix running multiple test assemblies in NUnitLite mode. (#76) It's not possible to use a single NUnitTestAssemblyRunner instance for multiple assemblies, so we need to create one for each assembly we want to test. --- NUnitLite/TouchRunner/TouchRunner.cs | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/NUnitLite/TouchRunner/TouchRunner.cs b/NUnitLite/TouchRunner/TouchRunner.cs index 9b3b018..eab6c3c 100644 --- a/NUnitLite/TouchRunner/TouchRunner.cs +++ b/NUnitLite/TouchRunner/TouchRunner.cs @@ -533,15 +533,21 @@ SettingsDictionary CreateSettings (SettingsDictionary settings) } #if NUNITLITE_NUGET - NUnitTestAssemblyRunner runner = new NUnitTestAssemblyRunner (new DefaultTestAssemblyBuilder ()); + // we need one runner per test assembly + DefaultTestAssemblyBuilder builder = new DefaultTestAssemblyBuilder (); + List runners = new List (); public bool Load (string assemblyName, IDictionary settings = null) { + var runner = new NUnitTestAssemblyRunner (builder); + runners.Add (runner); return AddSuite ((TestSuite) runner.Load (assemblyName, CreateSettings (settings))); } public bool Load (Assembly assembly, IDictionary settings = null) { + var runner = new NUnitTestAssemblyRunner (builder); + runners.Add (runner); return AddSuite ((TestSuite) runner.Load (assembly, CreateSettings (settings))); } #else @@ -576,7 +582,9 @@ public void Run (Test test) Result = null; #if NUNITLITE_NUGET - runner.Run (this, new MatchTestFilter { MatchTest = test }); + var filter = new MatchTestFilter { MatchTest = test }; + foreach (var runner in runners) + runner.Run (this, filter); // The TestResult we get back from the runner is for the top-most test suite, // which isn't necessarily the test that we ran. So look for the TestResult @@ -593,7 +601,13 @@ ITestResult find_result (ITestResult tr) return null; } - Result = (TestResult) (find_result (runner.Result) ?? runner.Result); + var tsr = new TestSuiteResult (suite); + foreach (var runner in runners) { + var rv = (TestResult) (find_result (runner.Result) ?? runner.Result); + if (rv != null) + tsr.AddResult (rv); + } + Result = tsr; #else TestExecutionContext current = TestExecutionContext.CurrentContext; current.WorkDirectory = Environment.CurrentDirectory;