Skip to content

Commit

Permalink
[TouchRunner] Fix running multiple test assemblies in NUnitLite mode. (
Browse files Browse the repository at this point in the history
…#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.
  • Loading branch information
rolfbjarne committed Jul 14, 2020
1 parent c151a18 commit f8d9a21
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions NUnitLite/TouchRunner/TouchRunner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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<NUnitTestAssemblyRunner> runners = new List<NUnitTestAssemblyRunner> ();

public bool Load (string assemblyName, IDictionary<string, object> settings = null)
{
var runner = new NUnitTestAssemblyRunner (builder);
runners.Add (runner);
return AddSuite ((TestSuite) runner.Load (assemblyName, CreateSettings (settings)));
}

public bool Load (Assembly assembly, IDictionary<string, object> settings = null)
{
var runner = new NUnitTestAssemblyRunner (builder);
runners.Add (runner);
return AddSuite ((TestSuite) runner.Load (assembly, CreateSettings (settings)));
}
#else
Expand Down Expand Up @@ -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
Expand All @@ -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;
Expand Down

0 comments on commit f8d9a21

Please sign in to comment.