protected override async void RunTestCases(IEnumerable <IXunitTestCase> testCases, IMessageSink executionMessageSink, ITestFrameworkExecutionOptions executionOptions) { SetupTracing(TestAssembly.Assembly); // Always run at least with one thread per VS version. if (executionOptions.MaxParallelThreadsOrDefault() < VsVersions.InstalledVersions.Length && !Debugger.IsAttached) { executionOptions.SetValue("xunit.execution.MaxParallelThreads", VsVersions.InstalledVersions.Length); Constants.Tracer.TraceEvent(TraceEventType.Verbose, 0, Strings.VsixTestFramework.SettingMaxThreads(VsVersions.InstalledVersions.Length)); } // If debugger is attached, don't run multiple instances simultaneously since that makes debugging much harder. if (Debugger.IsAttached) { executionOptions.SetValue("xunit.execution.MaxParallelThreads", 1); Constants.Tracer.TraceEvent(TraceEventType.Verbose, 0, Strings.VsixTestFramework.DebugMaxThreads); } // This is the implementation of the base XunitTestFrameworkExecutor using (var assemblyRunner = new VsixTestAssemblyRunner(TestAssembly, testCases, DiagnosticMessageSink, new TracingMessageSink(executionMessageSink, Constants.Tracer), executionOptions)) await assemblyRunner.RunAsync(); s_tracer.Flush(); }