Esempio n. 1
0
        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);
            }
        }
Esempio n. 2
0
        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);
            //}
        }