public void RunTestSet(PowerShell powerShell, TestCaseSet testCaseSet, IRunContext runContext) { SetupExecutionPolicy(); var module = FindModule("Pester", runContext); powerShell.AddCommand("Import-Module").AddParameter("Name", module); powerShell.Invoke(); powerShell.Commands.Clear(); if (powerShell.HadErrors) { var errorRecord = powerShell.Streams.Error.FirstOrDefault(); var errorMessage = errorRecord == null ? string.Empty : errorRecord.ToString(); throw new Exception(Resources.FailedToLoadPesterModule + errorMessage); } var fi = new FileInfo(testCaseSet.File); powerShell.AddCommand("Invoke-Pester") .AddParameter("Path", fi.Directory.FullName) .AddParameter("TestName", testCaseSet.Describe) .AddParameter("PassThru"); var pesterResults = powerShell.Invoke(); powerShell.Commands.Clear(); // The test results are not necessary stored in the first PSObject. var results = GetTestResults(pesterResults); testCaseSet.ProcessTestResults(results); }
public void RunTests(IEnumerable <TestCase> tests, IRunContext runContext, IFrameworkHandle frameworkHandle) { _mCancelled = false; SetupExecutionPolicy(); var testSets = new List <TestCaseSet>(); foreach (var testCase in tests) { var describe = testCase.FullyQualifiedName.Split('.').First(); var codeFile = testCase.CodeFilePath; var testSet = testSets.FirstOrDefault(m => m.Describe.Equals(describe, StringComparison.OrdinalIgnoreCase) && m.File.Equals(codeFile, StringComparison.OrdinalIgnoreCase)); if (testSet == null) { testSet = new TestCaseSet(codeFile, describe); testSets.Add(testSet); } testSet.TestCases.Add(testCase); } foreach (var testSet in testSets) { if (_mCancelled) { break; } var testOutput = new StringBuilder(); try { var testAdapter = new TestAdapterHost(); testAdapter.HostUi.OutputString = s => { if (!string.IsNullOrEmpty(s)) { testOutput.Append(s); } }; var runpsace = RunspaceFactory.CreateRunspace(testAdapter); runpsace.Open(); using (var ps = PowerShell.Create()) { ps.Runspace = runpsace; RunTestSet(ps, testSet, runContext); foreach (var testResult in testSet.TestResults) { frameworkHandle.RecordResult(testResult); } } } catch (Exception ex) { foreach (var testCase in testSet.TestCases) { var testResult = new TestResult(testCase); testResult.Outcome = TestOutcome.Failed; testResult.ErrorMessage = ex.Message; testResult.ErrorStackTrace = ex.StackTrace; frameworkHandle.RecordResult(testResult); } } if (testOutput.Length > 0) { frameworkHandle.SendMessage(TestMessageLevel.Informational, testOutput.ToString()); } } }