コード例 #1
0
        private TestRunResult RunInternal(TestRun testRun, ITestRunLogger logger,
                                          out TestRunExecutionContext context)
        {
            if (testRun == null)
            {
                throw new ArgumentNullException(nameof(testRun));
            }
            if (logger == null)
            {
                logger = new ConsoleTestRunLogger();
            }

            logger.LogWithTime($"Started to run \"{testRun.Name}\" test.");
            context = new TestRunExecutionContext
            {
                StartedAt = DateTime.Now,
                Logger    = logger
            };

            Initialize(context);

            context.Logger.LogWithTime("Run OnBeforeTestRun.");
            OnBeforeTestRun(context);
            var result = new TestRunResult(testRun.Name);

            context.Logger.LogWithTime("Run Test.");
            InvokeTestRun(testRun, context, result, logger);

            return(result);
        }
コード例 #2
0
 private void InvokeStep(ITestRunStep step, TestRunExecutionContext context, TestRunResult result,
                         ITestRunLogger logger)
 {
     context.Step = step;
     try
     {
         step.Run(context);
     }
     catch (TestRunAssertException)
     {
         result.AddStep(new TestRunStepResult(context.StepNumber, step.ToString(), false));
         throw;
     }
     catch (Exception ex)
     {
         result.IsSuccess = false;
         if (context.FirstException == null)
         {
             result.FailException   = ex;
             context.FirstException = ex;
         }
         else
         {
             context.LastException = ex;
         }
     }
     result.AddStep(new TestRunStepResult(context.StepNumber, step.ToString(), result.IsSuccess));
 }
コード例 #3
0
 /// <summary>
 /// Dump result state to logger.
 /// </summary>
 /// <param name="logger">Logger to be used.</param>
 public void Dump(ITestRunLogger logger)
 {
     logger.Log(new string('-', 96));
     logger.Log(string.Format("{0,-90}{1,6}", TruncateString(Name, 90), GetSuccessString(IsSuccess)));
     foreach (TestRunStepResult step in Steps)
     {
         logger.Log(string.Format("{0,-4}{1,-86}{2,6}", "#" + step.StepNum, TruncateString(step.Name, 86),
                                  GetSuccessString(step.IsSuccess)));
     }
     logger.Log(new string('-', 96));
 }
コード例 #4
0
        /// <summary>
        /// Run test run.
        /// </summary>
        /// <param name="testRun">Test run.</param>
        /// <param name="logger">Logger. Console is used by default.</param>
        /// <returns>Test run result.</returns>
        public virtual TestRunResult Run(TestRun testRun, ITestRunLogger logger = null)
        {
            TestRunExecutionContext context = null;

            try
            {
                return(RunInternal(testRun, logger, out context));
            }
            finally
            {
                context?.Logger.LogWithTime("Run OnAfterTestRun.");
                OnAfterTestRun(context);
            }
        }
コード例 #5
0
        /// <summary>
        /// Run multiple test runs from test run loader.
        /// </summary>
        /// <param name="testRunLoader">Test run loader.</param>
        /// <param name="logger">Logger to be used.</param>
        /// <returns>Results.</returns>
        public virtual IList <TestRunResult> Run(ITestRunLoader testRunLoader, ITestRunLogger logger = null)
        {
            if (testRunLoader == null)
            {
                throw new ArgumentNullException(nameof(testRunLoader));
            }
            if (logger == null)
            {
                logger = new ConsoleTestRunLogger();
            }

            var results = new List <TestRunResult>();

            foreach (TestRun testRun in testRunLoader.Get())
            {
                Run(testRun, logger);
            }
            return(results);
        }
コード例 #6
0
        /// <summary>
        /// Run test run with assert method. OnAfterTestRun will be called afterwards.
        /// </summary>
        /// <param name="testRun">Test run.</param>
        /// <param name="assert">Assert method.</param>
        /// <param name="logger">Logger. Console is used by default.</param>
        /// <returns>Test run result.</returns>
        public virtual TestRunResult RunWithAssert(
            TestRun testRun,
            Action <TestRun, TestRunResult> assert,
            ITestRunLogger logger = null)
        {
            TestRunExecutionContext context = null;

            try
            {
                var result = RunInternal(testRun, logger, out context);
                context.Logger.LogWithTime("Run asserts.");
                assert(testRun, result);
                return(result);
            }
            finally
            {
                context?.Logger.LogWithTime("Run OnAfterTestRun.");
                OnAfterTestRun(context);
            }
        }
コード例 #7
0
 private void InvokeTestRun(TestRun testRun, TestRunExecutionContext context, TestRunResult result,
                            ITestRunLogger logger)
 {
     context.TestRun         = testRun;
     context.ServiceProvider = ServiceProviderFactory.Create();
     OnBeforeTestRun(context);
     try
     {
         int stepNumber = 1;
         foreach (ITestRunStep testRunStep in testRun.Steps)
         {
             context.StepNumber = stepNumber++;
             InvokeStep(testRunStep, context, result, logger);
         }
     }
     finally
     {
         context.Step = null;
         var disposableServiceProvider = context.ServiceProvider as IDisposable;
         disposableServiceProvider?.Dispose();
         OnAfterTestRun(context);
     }
 }
コード例 #8
0
 /// <summary>
 /// Log text with current date time prepend.
 /// </summary>
 /// <param name="logger">Logger instance.</param>
 /// <param name="log">Log text.</param>
 public static void LogWithTime(this ITestRunLogger logger, string log)
 {
     logger.Log($"[{DateTime.Now:yy-MM-dd hh:mm:ss}] {log}");
 }