/// <summary>
        /// Track the results for our execution and also track the fail state.
        /// </summary>
        /// <param name="result">Scenario result to process.</param>
        public void TrackScenarioResult(ScenarioResult result)
        {
            Results.Add(result);
            State.IncrementTotalScenarios();

            if (result.Result != TestOutcome.Passed)
            {
                State.IncrementFailures();
            }
        }
예제 #2
0
 /// <summary>
 /// Process a UTF result message.
 /// </summary>
 /// <param name="logMessage">The log message object.</param>
 private void ProcessResult(LogMessage logMessage)
 {
     if (logMessage.HasDecorator(UnitTestLogDecorator.TestMethodMetadata))
     {
         ScenarioResult sr = (ScenarioResult)logMessage[UnitTestLogDecorator.ScenarioResult];
         if (sr.Result != TestOutcome.Passed)
         {
             _failures.Add(sr);
         }
     }
 }
        /// <summary>
        /// Process an unhandled exception for the method.
        /// </summary>
        /// <param name="sender">Source object.</param>
        /// <param name="e">Unhandled exception event arguments.</param>
        private void UnhandledMethodException(object sender, UnhandledExceptionEventArgs e)
        {
            TestOutcome res;
            Exception   excp = (Exception)e.ExceptionObject;

            IExpectedException expected = _testMethod.ExpectedException;
            Type expectedType           = expected != null ? expected.ExceptionType : null;

            if (excp == null)
            {
                throw new InvalidOperationException();
            }

            // Unwrap the Exception
            if (excp.GetType() == typeof(TargetInvocationException) && excp.InnerException != null)
            {
                excp = excp.InnerException;
            }

            res = excp is TimeoutException ? TestOutcome.Timeout : excp.Message.Contains("Inconclusive") ? TestOutcome.Inconclusive : TestOutcome.Failed;
            if (expected != null)
            {
                // Was it expected?
                Type excpType = excp.GetType();
                if (excpType == expectedType || excpType.IsSubclassOf(expectedType))
                {
                    res = TestOutcome.Passed;
                }
                else
                {
                    LogWriter.IncorrectException(_testMethod.ExpectedException.ExceptionType, excpType, _testClass, _testMethod);
                    LogWriter.LogException(excp, _testClass, _testMethod);
                }
            }
            else
            {
                // Regular Exception type
                LogWriter.LogException(excp, _testClass, _testMethod);
            }

            // Create the result
            _result = new ScenarioResult(_testMethod, _testClass, res, excp);
            SetResultTimes();

            // If an asynchronous method, do not run any additional parts of the method container
            if (_mainTestMethodContainer.RemainingWork)
            {
                while (_mainTestMethodContainer.RemainingWork)
                {
                    _mainTestMethodContainer.Dequeue();
                }
            }
        }
        /// <summary>
        /// Log the result of a unit test scenario.
        /// </summary>
        /// <param name="result">The result of the test.</param>
        public void TestResult(ScenarioResult result)
        {
            TestOutcome outcome = result.Result;
            string      name    = result.TestClass.Name + "." + result.TestMethod.Name;
            LogMessage  m       = Create(LogMessageType.TestResult, name);

            MarkUnitTestMessage(m);
            DecorateNameProperty(m, result.TestMethod.Name);
            DecorateTestGranularity(m, TestGranularity.TestScenario);
            m[UnitTestLogDecorator.ScenarioResult]     = result;
            m[UnitTestLogDecorator.TestMethodMetadata] = result.TestMethod;
            m[UnitTestLogDecorator.TestClassMetadata]  = result.TestClass;
            DecorateTestOutcome(m, outcome);
            Enqueue(m);
        }
        /// <summary>
        /// Process a UTF result message.
        /// </summary>
        /// <param name="logMessage">The log message object.</param>
        private void ProcessResult(LogMessage logMessage)
        {
            if (logMessage.HasDecorator(UnitTestLogDecorator.TestMethodMetadata))
            {
                TestOutcome    result = (TestOutcome)logMessage[LogDecorator.TestOutcome];
                ITestMethod    method = (ITestMethod)logMessage[UnitTestLogDecorator.TestMethodMetadata];
                ITestClass     test   = (ITestClass)logMessage[UnitTestLogDecorator.TestClassMetadata];
                ScenarioResult sr     = (ScenarioResult)logMessage[UnitTestLogDecorator.ScenarioResult];

                string   storage         = CurrentAssemblyName;
                string   codeBase        = CurrentAssemblyName;
                string   adapterTypeName = TestAdapterTypeName;
                string   className       = test.Name;
                string   testListName    = TestListName;
                string   computerName    = ComputerName;
                DateTime startTime       = sr.Started;
                DateTime endTime         = sr.Finished;
                _writer.AddTestMethodResult(method, storage, codeBase, adapterTypeName, className, testListName, computerName, startTime, endTime, result);
                _writer.IncrementResults(result);
            }
        }
예제 #6
0
        /// <summary>
        /// Process a result.
        /// </summary>
        /// <param name="result">The result data.</param>
        private void ProcessResult(ScenarioResult result)
        {
            TestClassData tac = GetClassModel(result.TestClass);
            TestMethodData tmd = GetMethodModel(result.TestMethod, tac);

            tmd.IsRunning = false;

            tmd.IsNotable = !tmd.Passed;

            if (_d == null)
            {
                return;
            }

            // Link to previous
            tmd.PreviousResult = _lastResult;
            _lastResult = tmd;

            _d.RunScenarios++;
            if (result.Result != TestOutcome.Passed)
            {
                _d.FailedScenarios++;

                // Link to previous failure
                tmd.PreviousFailingResult = _lastFailingResult;
                _lastFailingResult = tmd;

                // Automatically check the item for the user
                tmd.IsChecked = true;
            }

            tmd.Result = result;
        }
 /// <summary>
 /// Creates the ScenarioResult instance for this test method.
 /// </summary>
 /// <param name="outcome">The initial test outcome value.</param>
 private void CreateNewResult(TestOutcome outcome)
 {
     _result = new ScenarioResult(_testMethod, _testClass, outcome, null);
     SetResultTimes();
 }
 /// <summary>
 /// Initializes a new instance of the TestMethodCompletedEventArgs
 /// type.
 /// </summary>
 /// <param name="result">The result instance.</param>
 /// <param name="harness">The unit test harness.</param>
 public TestMethodCompletedEventArgs(ScenarioResult result, UnitTestHarness harness)
   : base(harness)
 {
   Result = result;
 }
 /// <summary>
 /// Initializes a new instance of the TestMethodCompletedEventArgs
 /// type.
 /// </summary>
 /// <param name="result">The result instance.</param>
 public TestMethodCompletedEventArgs(ScenarioResult result)
   : this(result, result.TestClass.Assembly.TestHarness)
 {
 }
 /// <summary>
 /// Log the result of a unit test scenario.
 /// </summary>
 /// <param name="result">The result of the test.</param>
 public void TestResult(ScenarioResult result)
 {
   TestOutcome outcome = result.Result;
   string name = result.TestClass.Name + "." + result.TestMethod.Name;
   LogMessage m = Create(LogMessageType.TestResult, name);
   MarkUnitTestMessage(m);
   DecorateNameProperty(m, result.TestMethod.Name);
   DecorateTestGranularity(m, TestGranularity.TestScenario);
   m[UnitTestLogDecorator.ScenarioResult] = result;
   m[UnitTestLogDecorator.TestMethodMetadata] = result.TestMethod;
   m[UnitTestLogDecorator.TestClassMetadata] = result.TestClass;
   DecorateTestOutcome(m, outcome);
   Enqueue(m);
 }
 /// <summary>
 /// Initializes a new instance of the TestMethodCompletedEventArgs
 /// type.
 /// </summary>
 /// <param name="result">The result instance.</param>
 /// <param name="harness">The unit test harness.</param>
 public TestMethodCompletedEventArgs(ScenarioResult result, UnitTestHarness harness)
     : base(harness)
 {
     Result = result;
 }
 /// <summary>
 /// Initializes a new instance of the TestMethodCompletedEventArgs
 /// type.
 /// </summary>
 /// <param name="result">The result instance.</param>
 public TestMethodCompletedEventArgs(ScenarioResult result)
     : this(result, result.TestClass.Assembly.TestHarness)
 {
 }
예제 #13
0
    /// <summary>
    /// Track the results for our execution and also track the fail state.
    /// </summary>
    /// <param name="result">Scenario result to process.</param>
    public void TrackScenarioResult(ScenarioResult result)
    {
      Results.Add(result);
      State.IncrementTotalScenarios();

      if (result.Result != TestOutcome.Passed)
      {
        State.IncrementFailures();
      }
    }
예제 #14
0
    /// <summary>
    /// Process an unhandled exception for the method.
    /// </summary>
    /// <param name="sender">Source object.</param>
    /// <param name="e">Unhandled exception event arguments.</param>
    private void UnhandledMethodException(object sender, UnhandledExceptionEventArgs e)
    {
      TestOutcome res;
      Exception excp = (Exception)e.ExceptionObject;

      IExpectedException expected = _testMethod.ExpectedException;
      Type expectedType = expected != null ? expected.ExceptionType : null;

      if (excp == null)
      {
        throw new InvalidOperationException();
      }

      // Unwrap the Exception
      if (excp.GetType() == typeof(TargetInvocationException) && excp.InnerException != null)
      {
        excp = excp.InnerException;
      }

      res = excp is TimeoutException ? TestOutcome.Timeout : excp.Message.Contains("Inconclusive") ? TestOutcome.Inconclusive : TestOutcome.Failed;
      if (expected != null)
      {
        // Was it expected?
        Type excpType = excp.GetType();
        if (excpType == expectedType || excpType.IsSubclassOf(expectedType))
        {
          res = TestOutcome.Passed;
        }
        else
        {
          LogWriter.IncorrectException(_testMethod.ExpectedException.ExceptionType, excpType, _testClass, _testMethod);
          LogWriter.LogException(excp, _testClass, _testMethod);
        }
      }
      else
      {
        // Regular Exception type
        LogWriter.LogException(excp, _testClass, _testMethod);
      }

      // Create the result
      _result = new ScenarioResult(_testMethod, _testClass, res, excp);
      SetResultTimes();

      // If an asynchronous method, do not run any additional parts of the method container
      if (_mainTestMethodContainer.RemainingWork)
      {
        while (_mainTestMethodContainer.RemainingWork)
        {
          _mainTestMethodContainer.Dequeue();
        }
      }
    }
예제 #15
0
 /// <summary>
 /// Creates the ScenarioResult instance for this test method.
 /// </summary>
 /// <param name="outcome">The initial test outcome value.</param>
 private void CreateNewResult(TestOutcome outcome)
 {
   _result = new ScenarioResult(_testMethod, _testClass, outcome, null);
   SetResultTimes();
 }