private ObjectModel.TestResult CreateTest(TestData test, TestStepRun stepRun, TestCase testCase)
        {
            ObjectModel.TestResult testResult = new ObjectModel.TestResult(testCase);
            testResult.DisplayName = test.Name;
            testResult.ErrorLineNumber = test.CodeLocation.Line;
            //testResult.ErrorStackTrace
            testResult.StartTime = stepRun.StartTime;
            if (stepRun.TestLog.Streams.Count > 0)
            {
                testResult.ErrorMessage = stepRun.TestLog.Streams[0].ToString();
            }
            testResult.EndTime = stepRun.EndTime;

            testResult.Duration = stepRun.Result.Duration;

            var testStatus = stepRun.Result.Outcome.Status;
            switch (testStatus)
            {
                case TestStatus.Passed:
                    testResult.Outcome = ObjectModel.TestOutcome.Passed;
                    break;
                case TestStatus.Failed:
                    testResult.Outcome = ObjectModel.TestOutcome.Failed;
                    break;
                case TestStatus.Skipped:
                    testResult.Outcome = ObjectModel.TestOutcome.Skipped;
                    break;
                case TestStatus.Inconclusive:
                    testResult.Outcome = ObjectModel.TestOutcome.NotFound;
                    break;
            }

            return testResult;
        }
示例#2
0
        private void HandleSkippedTest(ObjectModel.TestResult rsTestResult)
        {
            Debug.Assert(rsTestResult.Outcome == ObjectModel.TestOutcome.Skipped, "Test Result should be skipped but it is " + rsTestResult.Outcome);

            ObjectModel.TestCase testCase = rsTestResult.TestCase;
            string testCaseName           = !string.IsNullOrEmpty(testCase.DisplayName) ? testCase.DisplayName : testCase.FullyQualifiedName;
            string message = String.Format(CultureInfo.CurrentCulture, TrxLoggerResources.MessageForSkippedTests, testCaseName);

            this.AddRunLevelInformationalMessage(message);
        }
示例#3
0
        private List <ObjectModel.TestResult> GetTestResultObject(TestOutcome outcome)
        {
            var testcase   = new TestCase("TestName", new Uri("some://uri"), "TestSource");
            var testresult = new ObjectModel.TestResult(testcase);

            testresult.Outcome = outcome;
            var testresultList = new List <ObjectModel.TestResult> {
                testresult
            };

            return(testresultList);
        }
        private void RunTests(ITestExecutionRecorder testExecutionRecorder)
        {
            TestLauncherResult testLauncherResult = _launcher.Run();

            foreach (var allTestStepRun in testLauncherResult.Report.TestPackageRun.AllTestStepRuns)
            {
                TestCase tc = new TestCase(allTestStepRun.Step.FullName, new Uri(ExecutorUri));
                ObjectModel.TestResult testResult = new ObjectModel.TestResult(tc);
                testResult.DisplayName     = allTestStepRun.Step.FullName;
                testResult.ErrorLineNumber = allTestStepRun.Step.CodeLocation.Line;
                //testResult.ErrorStackTrace
                testResult.StartTime = allTestStepRun.StartTime;
                //testResult.ErrorMessage -- why this and messages?
                testResult.EndTime = allTestStepRun.EndTime;
                //testResult.Attachments = allTestStepRun.TestLog.Attachments; -- can I append my own?
                testResult.Duration = allTestStepRun.Result.Duration;
                //testResult.Messages =

                var testStatus = allTestStepRun.Result.Outcome.Status;
                switch (testStatus)
                {
                case TestStatus.Passed:
                    testResult.Outcome = ObjectModel.TestOutcome.Passed;
                    break;

                case TestStatus.Failed:
                    testResult.Outcome = ObjectModel.TestOutcome.Failed;
                    break;

                case TestStatus.Skipped:
                    testResult.Outcome = ObjectModel.TestOutcome.Skipped;
                    break;

                case TestStatus.Inconclusive:     //is this right to use not found?
                    testResult.Outcome = ObjectModel.TestOutcome.Skipped;
                    break;
                }

                testExecutionRecorder.RecordResult(testResult);
            }
        }
        private List <ObjectModel.TestResult> GetTestResultsObject()
        {
            var testcase = new TestCase("DymmyNamespace.DummyClass.TestName", new Uri("some://uri"), "TestSource")
            {
                DisplayName = "TestName"
            };

            var testresult = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.Passed
            };

            var testresult1 = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.Failed
            };

            var testresult2 = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.None
            };

            var testresult3 = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.NotFound
            };

            var testresult4 = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.Skipped
            };

            var testresultList = new List <ObjectModel.TestResult> {
                testresult, testresult1, testresult2, testresult3, testresult4
            };

            return(testresultList);
        }
        public void TestResultHandlerShouldShowStdOutMessagesBannerIfStdOutIsNotEmpty()
        {
            var count = 0;

            this.mockOutput.Setup(o => o.WriteLine(It.IsAny <string>(), It.IsAny <OutputLevel>())).Callback <string, OutputLevel>(
                (s, o) => { count++; });

            var loggerEvents = new InternalTestLoggerEvents(TestSessionMessageLogger.Instance);

            loggerEvents.EnableEvents();
            var parameters = new Dictionary <string, string>
            {
                { "verbosity", "normal" }
            };

            this.consoleLogger.Initialize(loggerEvents, parameters);

            string            message           = "Dummy message";
            var               testcase          = new TestCase("TestName", new Uri("some://uri"), "TestSource");
            TestResultMessage testResultMessage = new TestResultMessage(TestResultMessage.StandardOutCategory, message);
            var               testresult        = new ObjectModel.TestResult(testcase)
            {
                Outcome = TestOutcome.Failed
            };

            testresult.Messages.Add(testResultMessage);

            loggerEvents.RaiseTestResult(new TestResultEventArgs(testresult));
            loggerEvents.WaitForEventCompletion();

            // Added this for synchronization
            SpinWait.SpinUntil(() => count == 2, 300);

            this.mockOutput.Verify(o => o.WriteLine(CommandLineResources.StdOutMessagesBanner, OutputLevel.Information), Times.Once());
            this.mockOutput.Verify(o => o.WriteLine(" " + message, OutputLevel.Information), Times.Once());
        }
示例#7
0
        /// <summary>
        /// Creates test result
        /// </summary>
        /// <param name="executionId"></param>
        /// <param name="parentExecutionId"></param>
        /// <param name="testType"></param>
        /// <param name="testElement"></param>
        /// <param name="parentTestElement"></param>
        /// <param name="parentTestResult"></param>
        /// <param name="rocksteadyTestResult"></param>
        /// <returns>Trx test result</returns>
        private ITestResult CreateTestResult(Guid executionId, Guid parentExecutionId, TestType testType,
                                             ITestElement testElement, ITestElement parentTestElement, ITestResult parentTestResult, ObjectModel.TestResult rocksteadyTestResult)
        {
            // Create test result
            TrxLoggerObjectModel.TestOutcome testOutcome = this.converter.ToOutcome(rocksteadyTestResult.Outcome);
            var testResult = this.converter.ToTestResult(testElement.Id.Id, executionId, parentExecutionId, testElement.Name,
                                                         this.testResultsDirPath, testType, testElement.CategoryId, testOutcome, this.testRun, rocksteadyTestResult);

            // Normal result scenario
            if (parentTestResult == null)
            {
                this.results.TryAdd(executionId, testResult);
                return(testResult);
            }

            // Ordered test inner result scenario
            if (parentTestElement != null && parentTestElement.TestType.Equals(TrxLoggerConstants.OrderedTestType))
            {
                (parentTestResult as TestResultAggregation).InnerResults.Add(testResult);
                this.innerResults.TryAdd(executionId, testResult);
                return(testResult);
            }

            // Data driven inner result scenario
            if (parentTestElement != null && parentTestElement.TestType.Equals(TrxLoggerConstants.UnitTestType))
            {
                (parentTestResult as TestResultAggregation).InnerResults.Add(testResult);
                testResult.DataRowInfo      = (parentTestResult as TestResultAggregation).InnerResults.Count;
                testResult.ResultType       = TrxLoggerConstants.InnerDataDrivenResultType;
                parentTestResult.ResultType = TrxLoggerConstants.ParentDataDrivenResultType;
                return(testResult);
            }

            return(testResult);
        }
示例#8
0
        /// <summary>
        /// Gets or creates test element.
        /// </summary>
        /// <param name="executionId"></param>
        /// <param name="parentExecutionId"></param>
        /// <param name="testType"></param>
        /// <param name="parentTestElement"></param>
        /// <param name="rockSteadyTestCase"></param>
        /// <returns>Trx test element</returns>
        private ITestElement GetOrCreateTestElement(Guid executionId, Guid parentExecutionId, TestType testType, ITestElement parentTestElement, ObjectModel.TestResult rockSteadyTestResult)
        {
            ITestElement testElement = parentTestElement;

            // For scenarios like data driven tests, test element is same as parent test element.
            if (parentTestElement != null && !parentTestElement.TestType.Equals(TrxLoggerConstants.OrderedTestType))
            {
                return(testElement);
            }

            TestCase testCase = rockSteadyTestResult.TestCase;
            Guid     testId   = this.converter.GetTestId(testCase);

            // Scenario for inner test case when parent test element is not present.
            var testName = testCase.DisplayName;
            var adapter  = testCase.ExecutorUri.ToString();

            if (adapter.Contains(TrxLoggerConstants.MstestAdapterString) &&
                parentTestElement == null &&
                !string.IsNullOrEmpty(rockSteadyTestResult.DisplayName))
            {
                // Note: For old mstest adapters hierarchical support was not present. Thus inner result of data driven was identified using test result display name.
                // Non null test result display name means its a inner result of data driven/ordered test.
                // Changing GUID to keep supporting old mstest adapters.
                testId   = Guid.NewGuid();
                testName = rockSteadyTestResult.DisplayName;
            }

            // Get test element
            testElement = GetTestElement(testId);

            // Create test element
            if (testElement == null)
            {
                testElement = this.converter.ToTestElement(testId, executionId, parentExecutionId, testName, testType, testCase);
                testElements.TryAdd(testId, testElement);
            }

            return(testElement);
        }
示例#9
0
        /// <summary>
        /// Gets or creates test element.
        /// </summary>
        /// <param name="executionId"></param>
        /// <param name="parentExecutionId"></param>
        /// <param name="testType"></param>
        /// <param name="parentTestElement"></param>
        /// <param name="rockSteadyTestCase"></param>
        /// <returns>Trx test element</returns>
        private ITestElement GetOrCreateTestElement(Guid executionId, Guid parentExecutionId, TestType testType, ITestElement parentTestElement, ObjectModel.TestResult rockSteadyTestResult)
        {
            ITestElement testElement = parentTestElement;

            // For scenarios like data driven tests, test element is same as parent test element.
            if (parentTestElement != null && !parentTestElement.TestType.Equals(TrxLoggerConstants.OrderedTestType))
            {
                return(testElement);
            }

            Guid testId = Converter.GetTestId(rockSteadyTestResult.TestCase);

            // Scenario for inner test case when parent test element is not present.
            var testName = rockSteadyTestResult.TestCase.DisplayName;

            if (parentTestElement == null && !string.IsNullOrEmpty(rockSteadyTestResult.DisplayName))
            {
                testId   = Guid.NewGuid();
                testName = rockSteadyTestResult.DisplayName;
            }

            // Get test element
            testElement = GetTestElement(testId);

            // Create test element
            if (testElement == null)
            {
                testElement = Converter.ToTestElement(testId, executionId, parentExecutionId, testName, testType, rockSteadyTestResult.TestCase);
                testElements.TryAdd(testId, testElement);
            }

            return(testElement);
        }