Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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());
                }
            }
        }