Пример #1
0
        public void SuiteFinished(XmlNode resultNode)
        {
            var result = resultNode.GetAttribute("result");
            var label  = resultNode.GetAttribute("label");
            var site   = resultNode.GetAttribute("site");

            if (result == "Failed")
            {
                if (site == "SetUp" || site == "TearDown")
                {
                    testLog.SendMessage(
                        TestMessageLevel.Error,
                        string.Format("{0} failed for test fixture {1}", site, resultNode.GetAttribute("fullname")));

                    var messageNode = resultNode.SelectSingleNode("failure/message");
                    if (messageNode != null)
                    {
                        testLog.SendMessage(TestMessageLevel.Error, messageNode.InnerText);
                    }

                    var stackNode = resultNode.SelectSingleNode("failure/stack-trace");
                    if (stackNode != null)
                    {
                        testLog.SendMessage(TestMessageLevel.Error, stackNode.InnerText);
                    }
                }
            }
        }
Пример #2
0
        /// <summary>
        /// Log the parameter warnings on the parameter logger
        /// </summary>
        /// <param name="testExecutionRecorder">Handle to record test start/end/results/messages.</param>
        /// <param name="result">Result of the run operation.</param>
        private void LogCleanupResult(ITestExecutionRecorder testExecutionRecorder, RunCleanupResult result)
        {
            Debug.Assert(testExecutionRecorder != null, "Logger should not be null");

            if (!string.IsNullOrEmpty(result.StandardOut))
            {
                testExecutionRecorder.SendMessage(TestMessageLevel.Informational, result.StandardOut);
            }

            if (!string.IsNullOrEmpty(result.DebugTrace))
            {
                testExecutionRecorder.SendMessage(TestMessageLevel.Informational, result.DebugTrace);
            }

            if (!string.IsNullOrEmpty(result.StandardError))
            {
                testExecutionRecorder.SendMessage(
                    MSTestSettings.CurrentSettings.TreatClassAndAssemblyCleanupWarningsAsErrors ? TestMessageLevel.Error : TestMessageLevel.Warning,
                    result.StandardError);
            }

            if (result.Warnings != null)
            {
                foreach (string warning in result.Warnings)
                {
                    testExecutionRecorder.SendMessage(
                        MSTestSettings.CurrentSettings.TreatClassAndAssemblyCleanupWarningsAsErrors ? TestMessageLevel.Error : TestMessageLevel.Warning,
                        warning);
                }
            }
        }
Пример #3
0
        public void OnTestEvent(string report)
        {
            var node = XmlHelper.CreateXmlNode(report);

            try
            {
                switch (node.Name)
                {
                case "start-test":
                    TestStarted(node);
                    break;

                case "test-case":
                    TestFinished(node);
                    break;

                case "test-suite":
                    SuiteFinished(node);
                    break;
                }
            }
            catch (Exception ex)
            {
                _recorder.SendMessage(TestMessageLevel.Error,
                                      string.Format("Error processing {0} event for {1}", node.Name, node.GetAttribute("fullname")));
                _recorder.SendMessage(TestMessageLevel.Error, ex.ToString());
            }
        }
        public void OnTestEvent(string report)
        {
            var node = new NUnitTestEventHeader(report);

            dumpXml?.AddTestEvent(node.AsString());
            try
            {
                switch (node.Type)
                {
                case NUnitTestEventHeader.EventType.StartTest:
                    TestStarted(new NUnitTestEventStartTest(node));
                    break;

                case NUnitTestEventHeader.EventType.TestCase:
                    TestFinished(new NUnitTestEventTestCase(node));
                    break;

                case NUnitTestEventHeader.EventType.TestSuite:
                    SuiteFinished(new NUnitTestEventSuiteFinished(node));
                    break;

                case NUnitTestEventHeader.EventType.TestOutput:
                    TestOutput(new NUnitTestEventTestOutput(node));
                    break;
                }
            }
            catch (Exception ex)
            {
                _recorder.SendMessage(TestMessageLevel.Warning, $"Error processing {node.Name} event for {node.FullName}");
                _recorder.SendMessage(TestMessageLevel.Warning, ex.ToString());
            }
        }
Пример #5
0
        TestCase FindTestCase(ITestCase testCase)
        {
            TestCase result;

            if (testCases.TryGetValue(testCase, out result))
            {
                return(result);
            }

            result = testCases.Where(tc => tc.Key.UniqueID == testCase.UniqueID).Select(kvp => kvp.Value).FirstOrDefault();
            if (result != null)
            {
                return(result);
            }

            recorder.SendMessage(TestMessageLevel.Error, String.Format("Result reported for unknown test case: {0}", testCase.DisplayName));
            return(null);
        }
Пример #6
0
        public void OnTestEvent(string report)
        {
            var node = XmlHelper.CreateXmlNode(report);

#if !NETCOREAPP1_0
            dumpXml?.AddTestEvent(node.AsString());
#endif
            try
            {
                switch (node.Name)
                {
                case "start-test":
                    TestStarted(node);
                    break;

                case "test-case":
                    TestFinished(node);
                    break;

                case "test-suite":
                    SuiteFinished(node);
                    break;

                case "test-output":
                    TestOutput(node);
                    break;
                }
            }
            catch (Exception ex)
            {
                _recorder.SendMessage(TestMessageLevel.Warning, $"Error processing {node.Name} event for {node.GetAttribute("fullname")}");
                _recorder.SendMessage(TestMessageLevel.Warning, ex.ToString());
            }
        }
Пример #7
0
        /// <summary>
        /// Log the parameter warnings on the parameter logger
        /// </summary>
        /// <param name="testExecutionRecorder">Execution recorder.</param>
        /// <param name="warnings">Warnings.</param>
        private static void LogWarnings(ITestExecutionRecorder testExecutionRecorder, IEnumerable <string> warnings)
        {
            if (warnings == null)
            {
                return;
            }

            Debug.Assert(testExecutionRecorder != null, "Logger should not be null");

            // log the warnings
            foreach (string warning in warnings)
            {
                testExecutionRecorder.SendMessage(TestMessageLevel.Warning, warning);
            }
        }
Пример #8
0
 private void CacheSessionParameters(IRunContext runContext, ITestExecutionRecorder testExecutionRecorder)
 {
     if (!string.IsNullOrEmpty(runContext?.RunSettings?.SettingsXml))
     {
         try
         {
             var testRunParameters = RunSettingsUtilities.GetTestRunParameters(runContext.RunSettings.SettingsXml);
             if (testRunParameters != null)
             {
                 foreach (var kvp in testRunParameters)
                 {
                     this.sessionParameters.Add(kvp);
                 }
             }
         }
         catch (Exception ex)
         {
             testExecutionRecorder.SendMessage(TestMessageLevel.Error, ex.Message);
         }
     }
 }
Пример #9
0
 private void CacheSessionParameters(IRunContext runContext, ITestExecutionRecorder testExecutionRecorder)
 {
     if (!string.IsNullOrEmpty(runContext?.RunSettings?.SettingsXml))
     {
         try
         {
             var testRunParameters = RunSettingsUtilities.GetTestRunParameters(runContext.RunSettings.SettingsXml);
             if (testRunParameters != null)
             {
                 // Clear sessionParameters to prevent key collisions of test run parameters in case
                 // "Keep Test Execution Engine Alive" is selected in VS.
                 this.sessionParameters.Clear();
                 foreach (var kvp in testRunParameters)
                 {
                     this.sessionParameters.Add(kvp);
                 }
             }
         }
         catch (Exception ex)
         {
             testExecutionRecorder.SendMessage(TestMessageLevel.Error, ex.Message);
         }
     }
 }
Пример #10
0
        protected override bool Visit(IErrorMessage error)
        {
            recorder.SendMessage(TestMessageLevel.Error, String.Format("Catastrophic failure: {0}", ExceptionUtility.CombineMessages(error)));

            return(!cancelledThunk());
        }
Пример #11
0
        protected override bool Visit(IErrorMessage error)
        {
            recorder.SendMessage(TestMessageLevel.Error, String.Format("Catastrophic failure: {0}", error.Message));

            return(!cancelledThunk());
        }
Пример #12
0
 public void RunStarted(string name, int testCount)
 {
     testLog.SendMessage(TestMessageLevel.Informational, "Run started: " + name);
 }
Пример #13
0
 void IMessageLogger.SendMessage(TestMessageLevel testMessageLevel, string message) => recorder?.SendMessage(testMessageLevel, message);
Пример #14
0
 public bool ClassFailed(string className, string exceptionType, string message, string stackTrace)
 {
     recorder.SendMessage(TestMessageLevel.Error, String.Format("Fixture {0} failed: {1}: {2}\r\n{3}", className, exceptionType, message, stackTrace));
     return(!cancelledThunk());
 }
Пример #15
0
        private static void ExecuteStandardTest(ITestExecutionRecorder recorder, TestCase test, MethodInfo method,
                                                TestContext context, object instance)
        {
            try
            {
                recorder.SendMessage(TestMessageLevel.Informational, "Running standard test");

                var accessor    = CallAccessor.Create(method);
                var occurrences = 0;

                recorder.RecordResult(DutyCycle(accessor, ++occurrences));

                while (!context.Skipped && context.RepeatCount > 0)
                {
                    recorder.RecordResult(DutyCycle(accessor, ++occurrences));
                    context.RepeatCount--;
                }
            }
            finally
            {
                context.Dispose();
            }

            TestResult DutyCycle(IMethodCallAccessor accessor, int occurrence)
            {
                if (occurrence > 1)
                {
                    var clone = new TestCase
                    {
                        DisplayName        = $"{test.DisplayName ?? "<No Name>"} #{occurrence}",
                        ExecutorUri        = test.ExecutorUri,
                        FullyQualifiedName = test.FullyQualifiedName,
                        Id                 = test.Id,
                        LineNumber         = test.LineNumber,
                        LocalExtensionData = test.LocalExtensionData,
                        CodeFilePath       = test.CodeFilePath,
                        Source             = test.Source
                    };

                    clone.Traits.AddRange(test.Traits);

                    test = clone;
                }


                TestResult testResult = null;

                try
                {
                    recorder.SendMessage(TestMessageLevel.Informational, "Starting test");
                    recorder.RecordStart(test);

                    context.BeginTest();
                    var result = ExecuteTestMethod(accessor, instance, context);
                    context.EndTest();

                    var outcome = context.Skipped ? TestOutcome.Skipped :
                                  result ? TestOutcome.Passed : TestOutcome.Failed;
                    recorder.SendMessage(TestMessageLevel.Informational,
                                         $"{test.DisplayName} => {outcome.ToString().ToLowerInvariant()}");

                    recorder.SendMessage(TestMessageLevel.Informational, "Ending test");
                    recorder.RecordEnd(test, outcome);

                    testResult = new TestResult(test)
                    {
                        Outcome = outcome
                    };
                    if (context.Skipped)
                    {
                        testResult.Messages.Add(new TestResultMessage(Constants.Categories.Skipped,
                                                                      context.SkipReason));
                    }

                    var listener = Trace.Listeners.OfType <TestResultTraceListener>().SingleOrDefault();
                    if (listener != null)
                    {
                        testResult.Messages.Add(listener.ToMessage());
                    }

                    return(testResult);
                }
                catch (Exception ex)
                {
                    recorder.SendMessage(TestMessageLevel.Error, ex.Message);
                    testResult ??= new TestResult(test);

                    testResult.Messages.Add(new TestResultMessage(Constants.Categories.Failed,
                                                                  "Test failed because an exception prevented execution."));

                    testResult.Outcome         = TestOutcome.Failed;
                    testResult.ErrorMessage    = ex.Message;
                    testResult.ErrorStackTrace = ex.StackTrace;

                    return(testResult);
                }
            }
        }