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);
        }
Example #5
0
        /// <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;
        }