예제 #1
0
        /// <summary>
        /// INTERNAL METHOD, FOR TESTING PURPOSES ONLY. DO NOT CALL.
        /// </summary>
        protected void Run(
            IEnumerable <Xunit1TestCase> testCases,
            _IMessageSink messageSink)
        {
            var results       = new Xunit1RunSummary();
            var environment   = $"{IntPtr.Size * 8}-bit .NET {Environment.Version}";
            var testCasesList = testCases.ToList();

            var testAssemblyStartingMessage = new _TestAssemblyStarting
            {
                AssemblyName             = testAssemblyName,
                AssemblyPath             = assemblyFileName,
                AssemblyUniqueID         = TestAssemblyUniqueID,
                ConfigFilePath           = configFileName,
                StartTime                = DateTimeOffset.Now,
                TestEnvironment          = environment,
                TestFrameworkDisplayName = TestFrameworkDisplayName,
            };

            if (messageSink.OnMessage(testAssemblyStartingMessage))
            {
                try
                {
                    if (testCasesList.Count != 0)
                    {
                        results = RunTestCollection(testCasesList, messageSink);
                    }
                }
                catch (Exception ex)
                {
                    var errorMetadata = Xunit1ExceptionUtility.ConvertToErrorMetadata(ex);
                    var errorMessage  = new _ErrorMessage
                    {
                        ExceptionParentIndices = errorMetadata.ExceptionParentIndices,
                        ExceptionTypes         = errorMetadata.ExceptionTypes,
                        Messages    = errorMetadata.Messages,
                        StackTraces = errorMetadata.StackTraces
                    };
                    messageSink.OnMessage(errorMessage);
                }
                finally
                {
                    var assemblyFinished = new _TestAssemblyFinished
                    {
                        AssemblyUniqueID = testAssemblyStartingMessage.AssemblyUniqueID,
                        ExecutionTime    = results.Time,
                        TestsFailed      = results.Failed,
                        TestsRun         = results.Total,
                        TestsSkipped     = results.Skipped
                    };

                    messageSink.OnMessage(assemblyFinished);
                }
            }
        }
예제 #2
0
        Xunit1RunSummary RunTestCollection(
            IList <Xunit1TestCase> testCases,
            _IMessageSink messageSink)
        {
            Guard.ArgumentValid(nameof(testCases), "testCases must contain at least one test case", testCases.Count > 0);

            var collectionStarting = new _TestCollectionStarting
            {
                AssemblyUniqueID          = testCases[0].AssemblyUniqueID,
                TestCollectionClass       = null,
                TestCollectionDisplayName = $"xUnit.net v1 Tests for {assemblyFileName}",
                TestCollectionUniqueID    = testCases[0].TestCollectionUniqueID
            };

            var results = new Xunit1RunSummary
            {
                Continue = messageSink.OnMessage(collectionStarting)
            };

            try
            {
                if (results.Continue)
                {
                    foreach (var testClassGroup in testCases.GroupBy(tc => tc.TestClass))
                    {
                        var classResults = RunTestClass(testClassGroup.Key, testClassGroup.ToList(), messageSink);
                        results.Aggregate(classResults);
                        if (!classResults.Continue)
                        {
                            break;
                        }
                    }
                }
            }
            finally
            {
                var collectionFinished = new _TestCollectionFinished
                {
                    AssemblyUniqueID       = collectionStarting.AssemblyUniqueID,
                    ExecutionTime          = results.Time,
                    TestCollectionUniqueID = collectionStarting.TestCollectionUniqueID,
                    TestsFailed            = results.Failed,
                    TestsRun     = results.Total,
                    TestsSkipped = results.Skipped
                };

                results.Continue = messageSink.OnMessage(collectionFinished) && results.Continue;
            }

            return(results);
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of the <see cref="TestClassCallbackHandler" /> class.
        /// </summary>
        /// <param name="testCases">The test cases that are being run.</param>
        /// <param name="messageSink">The message sink to call with the translated results.</param>
        public TestClassCallbackHandler(
            IList <Xunit1TestCase> testCases,
            _IMessageSink messageSink)
            : base(lastNodeName: "class")
        {
            Guard.ArgumentNotNull(nameof(testCases), testCases);
            Guard.ArgumentNotNull(nameof(messageSink), messageSink);

            this.messageSink = messageSink;
            this.testCases   = testCases;

            handlers = new Dictionary <string, Predicate <XmlNode> > {
                { "class", OnClass },
                { "start", OnStart },
                { "test", OnTest }
            };

            TestClassResults = new Xunit1RunSummary();
        }