public void RunAllTests() { var ta = new TestArguments(new[] { string.Format("assembly={0}", _testAssembly), "newDomain=true" }); // Get tests var assembly = Assembly.LoadFrom(ta.AssemblyLocation); var filteredTests = new List<MethodInfo>(AssemblyParser.GetTestMethods(assembly)); var tests = filteredTests.Select(test => string.Format("{0}.{1}", test.ReflectedType.FullName, test.Name)).ToList(); // Run tests var sw = Stopwatch.StartNew(); TestResult result = new Runner.TestRunner().RunTestsInParallel(tests, assembly, ta.NumberOfThreads); sw.Stop(); var total = (from object r in result.Results select r as TestResult).Count(); var failed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsFailure || tr.IsError); var passed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsSuccess); // Test should finish in under one minute Assert.IsTrue(sw.ElapsedMilliseconds / 1000 < 60); // 10 Tests were run Assert.IsTrue(total == 10); // 1 Failed Assert.IsTrue(failed == 1); // 9 Passed Assert.IsTrue(passed == 9); }
public void GetTestArguments() { var ta = new TestArguments(new[] { "assembly=someAssembly.dll", "fixtures=someFixture", "categories=someCategory", "newDomain=true", "xml=someXml.xml" }); Assert.AreEqual("someAssembly.dll", ta.AssemblyLocation); Assert.AreEqual("someFixture", ta.Fixtures.First()); Assert.AreEqual(1, ta.Fixtures.Count()); Assert.AreEqual("someCategory", ta.Categories.First()); Assert.AreEqual(1, ta.Categories.Count()); Assert.IsNotNull(ta.NewDomain); Assert.AreEqual(true, ta.NewDomain); Assert.IsTrue(ta.Xml.EndsWith("someXml.xml")); Assert.IsTrue(ta.NumberOfThreads == Environment.ProcessorCount * 4); ta = new TestArguments(new[] { "assembly=someAssembly.dll", "threads=5" }); Assert.IsTrue(ta.Xml.EndsWith("TestResult.xml")); Assert.IsTrue(ta.NumberOfThreads == 5); }
public void RunCategoryTests() { var ta = new TestArguments(new[] { string.Format("assembly={0}", _testAssembly), "categories=A", "newDomain=true" }); // Get tests var assembly = Assembly.LoadFrom(ta.AssemblyLocation); var allTests = AssemblyParser.GetTestMethods(assembly); var filteredTests = new List<MethodInfo>(); foreach (var fixture in ta.Fixtures) { filteredTests.AddRange(AssemblyParser.FilterByFixture(allTests, fixture)); } foreach (var category in ta.Categories) { filteredTests.AddRange(AssemblyParser.FilterByCategory(allTests, category)); } var tests = filteredTests.Select(test => string.Format("{0}.{1}", test.ReflectedType.FullName, test.Name)).ToList(); // Run tests TestResult result = new Runner.TestRunner().RunTestsInParallel(tests, assembly, ta.NumberOfThreads); var total = (from object r in result.Results select r as TestResult).Count(); var failed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsFailure || tr.IsError); var passed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsSuccess); // 1 Test was run Assert.IsTrue(total == 1); // 1 Failed Assert.IsTrue(failed == 1); // 0 Passed Assert.IsTrue(passed == 0); }
public void RunMinuteLongTest() { var ta = new TestArguments(new[] { string.Format("assembly={0}", _testAssembly), "fixtures=OneMinute", "newDomain=true" }); // Get tests var assembly = Assembly.LoadFrom(ta.AssemblyLocation); var allTests = AssemblyParser.GetTestMethods(assembly); var filteredTests = new List<MethodInfo>(); foreach (var fixture in ta.Fixtures) { filteredTests.AddRange(AssemblyParser.FilterByFixture(allTests, fixture)); } foreach (var category in ta.Categories) { filteredTests.AddRange(AssemblyParser.FilterByCategory(allTests, category)); } var tests = filteredTests.Select(test => string.Format("{0}.{1}", test.ReflectedType.FullName, test.Name)).ToList(); // Run tests var sw = Stopwatch.StartNew(); TestResult result = new Runner.TestRunner().RunTestsInParallel(tests, assembly, ta.NumberOfThreads); sw.Stop(); var total = (from object r in result.Results select r as TestResult).Count(); var failed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsFailure || tr.IsError); var passed = (from object r in result.Results select r as TestResult).Count(tr => tr.IsSuccess); // Test should finish in under one minute Assert.IsTrue(sw.ElapsedMilliseconds / 1000 < 60); // 6 Tests were run Assert.IsTrue(total == 6); // 0 Failed Assert.IsTrue(failed == 0); // 6 Passed Assert.IsTrue(passed == 6); }
/// <summary> /// Runs the tests specified in the arguments. /// </summary> /// <param name="args"> /// The args. /// </param> /// <returns> /// The tests result. /// </returns> public static TestResult RunTests(string[] args) { var ta = new TestArguments(args); // Run in new domain? if (ta.NewDomain == true) { var setupInfo = new AppDomainSetup { ApplicationBase = Path.GetDirectoryName(ta.AssemblyLocation), PrivateBinPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase), ConfigurationFile = ta.AssemblyLocation + ".config", }; var domain = AppDomain.CreateDomain("NewDomain", null, setupInfo); var argsNew = new List<string> { string.Format("xml={0}", ta.Xml), string.Format("threads={0}", ta.NumberOfThreads), string.Format("fixtures={0}", string.Join(",", ta.Fixtures)), string.Format("categories={0}", string.Join(",", ta.Categories)), string.Format("assembly={0}", ta.AssemblyLocation), "newDomain=false" }; domain.ExecuteAssembly(Assembly.GetExecutingAssembly().CodeBase, argsNew.ToArray()); } // Console output Console.WriteLine("Startup"); Console.WriteLine("Assembly: {0}", ta.AssemblyLocation); if (ta.Fixtures.Any()) Console.WriteLine("Include Fixtures: {0}", string.Join(",", ta.Fixtures)); if (ta.Categories.Any()) Console.WriteLine("Include Categories: {0}", string.Join(",", ta.Categories)); bool runAllTests = false; if (!ta.Categories.Any() && !ta.Fixtures.Any()) { Console.WriteLine("No Fixtures/Categories specified, running all tests found in assembly..."); runAllTests = true; } Console.WriteLine("Output Test Results XML To: {0}", ta.Xml); Console.WriteLine("New Domain: {0}", ta.NewDomain); // Get tests var assembly = Assembly.LoadFrom(ta.AssemblyLocation); var allTests = AssemblyParser.GetTestMethods(assembly); var filteredTests = new List<MethodInfo>(); foreach (var fixture in ta.Fixtures) { filteredTests.AddRange(AssemblyParser.FilterByFixture(allTests, fixture)); } foreach (var category in ta.Categories) { filteredTests.AddRange(AssemblyParser.FilterByCategory(allTests, category)); } if (runAllTests) { filteredTests.AddRange(allTests); } var tests = filteredTests.Select(test => string.Format("{0}.{1}", test.ReflectedType.FullName, test.Name)).ToList(); Console.WriteLine("Running {0} tests...", filteredTests.Count); // Start timer for tests var watch = Stopwatch.StartNew(); // Run tests TestResult results = new Runner.TestRunner().RunTestsInParallel(tests, assembly, ta.NumberOfThreads); // Output results using (TextWriter writer = File.CreateText(ta.Xml)) { TestResultsWriter.SaveXmlOutput(results, writer); } Console.WriteLine("Completed tests in: {0}", watch.Elapsed); return results; }