public XUnitTestInfo GetTestInfo(string path, string[] supportAssemblies) { var infos = new List <TestCaseInfo>(); if (null != path && File.Exists(path)) { using (var controller = new XunitFrontController(AppDomainSupport.Denied, path)) using (var discoveryVisitor = new DefaultDiscoveryVisitor()) { controller.Find(false, discoveryVisitor, TestFrameworkOptions.ForDiscovery()); discoveryVisitor.Finished.WaitOne(); foreach (var testCase in discoveryVisitor.TestCases) { infos.Add(new TestCaseInfo { Id = testCase.UniqueID, Type = testCase.TestMethod.TestClass.Class.Name, Method = testCase.TestMethod.Method.Name, Args = testCase.TestMethodArguments }); } } // sort by type, method infos.Sort((info1, info2) => { int i = string.Compare(info1.Type, info2.Type, StringComparison.Ordinal); if (i == 0) { i = string.Compare(info1.Method, info2.Method, StringComparison.Ordinal); } return(i); }); } var testInfo = new XUnitTestInfo(); BuildTestInfo(testInfo, infos, 0); return(testInfo); }
/// <summary> /// Execute test cases. /// </summary> /// <param name="assembly">Assembly.</param> /// <param name="testInfos">Test infos.</param> /// <param name="executionListener">Execution listener.</param> /// <remarks>It uses xunit execution engine to execute the test cases.</remarks> public void Execute(string assembly, string[] nameFilter, IRemoteEventListener executionListener) { var lookup = new HashSet <string>(); foreach (var testId in nameFilter) { lookup.Add(testId); } TestAssemblyConfiguration conf = LoadTestAssemblyConfiguration(assembly); var discoveryOptions = TestFrameworkOptions.ForDiscovery(conf); var executionOptions = TestFrameworkOptions.ForExecution(conf); executionOptions.SetSynchronousMessageReporting(true); // we don't want to run every test in the assembly // only the tests passed in "testInfos" argument using (var controller = new XunitFrontController(conf.AppDomainOrDefault, assembly, null, conf.ShadowCopyOrDefault, null, new NullSourceInformationProvider())) using (var discoveryVisitor = new DefaultDiscoveryVisitor(tc => lookup.Contains(tc.UniqueID))) using (var executionVisitor = new DefaultExecutionVisitor(executionListener)) { controller.Find(false, discoveryVisitor, discoveryOptions); discoveryVisitor.Finished.WaitOne(); controller.RunTests(discoveryVisitor.TestCases, executionVisitor, executionOptions); executionVisitor.Finished.WaitOne(); } }