List <ITestCase> GetTestCases(AssemblyRunInfo runInfo, ITestFrameworkDiscoverer discoverer) { string assemblyFileName = runInfo.AssemblyFileName; // Xunit needs the file name var configuration = runInfo.Configuration; var discoveryOptions = TestFrameworkOptions.ForDiscovery(configuration); using (var sink = new TestDiscoverySink()) { discoverer.Find(includeSourceInformation: false, sink, discoveryOptions); sink.Finished.WaitOne(); return(sink.TestCases); } }
ExecutionSummary RunTestsInAssembly(AssemblyRunInfo runInfo) { //var assemblyDisplayName = "(unknown assembly)"; //try //{ var assembly = new XunitProjectAssembly { AssemblyFilename = runInfo.AssemblyFileName }; var assemblyFileName = runInfo.AssemblyFileName; //assemblyDisplayName = Path.GetFileNameWithoutExtension(assemblyFileName); //var configuration = runInfo.Configuration; //var shadowCopy = configuration.ShadowCopyOrDefault; var appDomain = assembly.Configuration.AppDomain ?? AppDomainSupport.Denied; //var longRunningSeconds = assembly.Configuration.LongRunningTestSecondsOrDefault; runInfo.Configuration.PreEnumerateTheories = true; //if (runSettings.DisableAppDomain) // appDomain = AppDomainSupport.Denied; //#if WINDOWS_UAP // // For AppX Apps, use the package location // assemblyFileName = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, Path.GetFileName(assemblyFileName)); //#endif //var diagnosticSink = DiagnosticMessageSink.ForDiagnostics(logger, assemblyDisplayName, runInfo.Configuration.DiagnosticMessagesOrDefault); //var diagnosticMessageSink = MessageSinkAdapter.Wrap(diagnosticSink); using (var controller = new XunitFrontController(appDomain, assemblyFileName /*, shadowCopy: shadowCopy, diagnosticMessageSink: diagnosticMessageSink*/)) { // Execute tests var executionOptions = TestFrameworkOptions.ForExecution(runInfo.Configuration); executionOptions.SetSynchronousMessageReporting(true); executionOptions.SetDisableParallelization(true); var testCases = GetTestCases(runInfo, controller); var discoveredTestCases = GetVsTestCases(assemblyFileName, controller, testCases); var testCasesMap = new Dictionary <string, VsTestCase>(StringComparer.Ordinal); var uniqueTestCases = new List <ITestCase>(); foreach (var discoveredTestCase in discoveredTestCases) { var uniqueID = discoveredTestCase.UniqueID; if (testCasesMap.ContainsKey(uniqueID)) { //logger.LogWarning(filteredTestCase.TestCase, "Skipping test case with duplicate ID '{0}' ('{1}' and '{2}')", uniqueID, testCasesMap[uniqueID].DisplayName, filteredTestCase.VSTestCase.DisplayName); } else { testCasesMap.Add(uniqueID, discoveredTestCase.VSTestCase); uniqueTestCases.Add(discoveredTestCase.TestCase); } } var recorder = new TrxTestResultRecorder(); using (var resultsSink = new RunnerExecutionSink(testCasesMap, recorder, this.blameWriter, this.resultsWriter)) { controller.RunTests(uniqueTestCases, resultsSink, executionOptions); resultsSink.Finished.WaitOne(); return(resultsSink.ExecutionSummary); } //var assembliesElement = new XElement("assemblies"); //var assemblyElement = new XElement("assembly"); //using (var executionSink = new DelegatingXmlCreationSink(new BlameCrashExecutionSink(blameWriter), assemblyElement)) //{ // controller.RunTests(testCases, executionSink, executionOptions); // executionSink.Finished.WaitOne(); // //assembliesElement.Add(new XAttribute("timestamp", DateTime.Now.ToString(CultureInfo.InvariantCulture))); // assembliesElement.Add(assemblyElement); // assembliesElement.Save(resultsWriter); // return executionSink.ExecutionSummary; //} } //} //catch (Exception ex) //{ // logger.LogError("{0}: Catastrophic failure: {1}", assemblyDisplayName, ex); //} }