private void LogTest(TestStepFinishedEventArgs e) { // A TestResult with State == TestState.Passed won't be displayed in the // output window (TD.NET just diplays "[TestName] passed" in the status bar. // Since that can be harder to notice, and also is lost when the following // test finishes, we print a message in the output window so the user can // progressively see if the tests are passing or failing. if (e.TestStepRun.Result.Outcome.Status == TestStatus.Passed) { testListener.WriteLine(String.Format(Resources.TDNetLogMonitor_TestCasePassed, e.TestStepRun.Step.FullName), FacadeCategory.Info); } // Inform TD.NET what happened FacadeTestResult result = new FacadeTestResult(); result.Name = e.TestStepRun.Step.FullName; result.TimeSpan = e.TestStepRun.Result.Duration; // result.TestRunner = "Gallio"; // note: can crash in older versions of TD.Net with MissingFieldException // It's important to set the stack trace here so the user can double-click in the // output window to go the faulting line StructuredStream failureStream = e.TestStepRun.TestLog.GetStream(MarkupStreamNames.Failures); if (failureStream != null) { result.StackTrace = failureStream.ToString(); } StructuredStream warningStream = e.TestStepRun.TestLog.GetStream(MarkupStreamNames.Warnings); if (warningStream != null) { result.Message = warningStream.ToString(); } // TD.NET will automatically count the number of passed, ignored and failed tests // provided we call the TestFinished method with the right State result.State = GetTestState(e.TestStepRun.Result.Outcome.Status); testListener.TestFinished(result); }