public void RunTests(string assemblyName, string[] testNames, string explictlyIncluding, ITestResultListener listener) { using (var nativeTestFactory = RunTestDiscovery(Assembly.Load(assemblyName), t => true)) { foreach (var name in testNames) { var testContext = nativeTestFactory.Contexts[name]; var ignoreReason = nativeTestFactory.GetIgnoreReason(name, explictlyIncluding); listener.NotifyStart(testContext.Name.FullName); List <string> traceMessages = new List <string>(); if (ignoreReason == null) { var result = SpecificationRunner.RunTest(testContext, traceMessages); listener.NotifyEnd(testContext.Name.FullName, result); } else { var result = new TestResultShim(); result.SetSkipped(ignoreReason); listener.NotifyEnd(testContext.Name.FullName, result); } } } }
public void NotifyEnd(string testFullName, TestResultShim testResult) { var test = _tests[testFullName]; var result = new TestResult(test) { Outcome = MapToOutcome(testResult), DisplayName = testFullName }; if (result.Outcome == TestOutcome.Failed) { result.ErrorMessage = testResult.FailureReason; result.ErrorStackTrace = testResult.FailureStackTrace; } else if (result.Outcome == TestOutcome.Skipped) { // TODO: can we include the reason skipped in VS output somehow? result.Messages.Add( new TestResultMessage("ReasonSkipped", testResult.ReasonSkipped)); } _frameworkHandle.RecordEnd(test, result.Outcome); _frameworkHandle.RecordResult(result); }
public TestOutcome MapToOutcome(TestResultShim shim) { switch (shim.Status) { case TestResultShim.Result.Successs: return(TestOutcome.Passed); case TestResultShim.Result.Error: return(TestOutcome.Failed); case TestResultShim.Result.Skipped: return(TestOutcome.Skipped); default: throw new ArgumentOutOfRangeException(); } }
protected override void DoOneTimeTearDown(TestResult suiteResult) { try { _testContext.FixtureContext.GlobalSetupManager.Cleanup(_testContext.Position); } catch (Exception innerException) { NUnitException exception2 = innerException as NUnitException; if (exception2 != null) { innerException = exception2.InnerException; } var shim = new TestResultShim(); TestResultUtil.Error(shim, suiteResult.Test.GetMultilineName(), innerException, null, TestResultShim.Site.TearDown); NativeTestResult.ApplyToNunitResult(shim, suiteResult); } }
public static TestResult ApplyToNunitResult(TestResultShim shim, TestResult result) { switch (shim.Status) { case TestResultShim.Result.Successs: result.Success(); break; case TestResultShim.Result.Error: result.SetResult(ResultState.Error, shim.FailureReason, shim.FailureStackTrace, GetNUnitFailureSite(shim.FailureSite)); break; default: throw new ArgumentOutOfRangeException(); } result.Time = shim.ExecutionTime.Seconds; return(result); }