public override TestResult Execute(ITestExecutionContext context)
        {
            PerformanceTest.StartTest(context.CurrentTest);

            try
            {
                innerCommand.Execute(context);
            }
            catch (Exception exception)
            {
                context.CurrentResult.RecordException(exception);
            }

            if (PerformanceTest.Active.Failed)
            {
                context.CurrentResult.SetResult(ResultState.Failure);
            }
            PerformanceTest.EndTest(context.CurrentTest);
            return(context.CurrentResult);
        }
        public IEnumerable ExecuteEnumerable(ITestExecutionContext context)
        {
            PerformanceTest.StartTest(context.CurrentTest);

            var unityContext = (UnityTestExecutionContext)context;
            var state        = unityContext.SetUpTearDownState;

            if (state == null)
            {
                // We do not expect a state to exist in playmode
                state = ScriptableObject.CreateInstance <EnumerableSetUpTearDownCommandState>();
            }

            while (state.NextSetUpStepIndex < SetUps.Length)
            {
                var methodInfo = SetUps[state.NextSetUpStepIndex];
                var enumerator = Run(context, methodInfo);
                SetEnumeratorPC(enumerator, state.NextSetUpStepPc);

                var logScope = new LogScope();

                while (true)
                {
                    try
                    {
                        if (!enumerator.MoveNext())
                        {
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        state.TestHasRun = true;
                        Debug.LogException(ex);
                        context.CurrentResult.SetResult(ResultState.Failure, ex.Message);
                        break;
                    }

                    state.NextSetUpStepPc = GetEnumeratorPC(enumerator);
                    yield return(enumerator.Current);
                }

                if (logScope.AnyFailingLogs())
                {
                    state.TestHasRun = true;
                    context.CurrentResult.SetResult(ResultState.Failure);
                }

                logScope.Dispose();

                state.NextSetUpStepIndex++;
                state.NextSetUpStepPc = 0;
            }

            if (!state.TestHasRun)
            {
                if (innerCommand is IEnumerableTestMethodCommand)
                {
                    var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context);
                    foreach (var iterator in executeEnumerable)
                    {
                        yield return(iterator);
                    }
                }
                else
                {
                    context.CurrentResult = innerCommand.Execute(context);
                }

                state.TestHasRun = true;
            }

            if (!state.TestTearDownStarted)
            {
                state.CurrentTestResultStatus = context.CurrentResult.ResultState.Status;
                state.CurrentTestResultLabel  = context.CurrentResult.ResultState.Label;
                state.CurrentTestResultSite   = context.CurrentResult.ResultState.Site;
                state.CurrentTestMessage      = context.CurrentResult.Message;
                state.CurrentTestStrackTrace  = context.CurrentResult.StackTrace;
            }

            while (state.NextTearDownStepIndex < TearDowns.Length)
            {
                state.TestTearDownStarted = true;
                var methodInfo = TearDowns[state.NextTearDownStepIndex];
                var enumerator = Run(context, methodInfo);
                SetEnumeratorPC(enumerator, state.NextTearDownStepPc);

                var logScope = new LogScope();

                while (true)
                {
                    try
                    {
                        if (!enumerator.MoveNext())
                        {
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Debug.LogException(ex);
                        context.CurrentResult.SetResult(ResultState.Failure, ex.Message);
                        break;
                    }

                    state.NextTearDownStepPc = GetEnumeratorPC(enumerator);
                    yield return(enumerator.Current);
                }

                if (logScope.AnyFailingLogs())
                {
                    state.TestHasRun = true;
                    context.CurrentResult.SetResult(ResultState.Failure);
                }

                logScope.Dispose();

                state.NextTearDownStepIndex++;
                state.NextTearDownStepPc = 0;
            }

            context.CurrentResult.SetResult(
                new ResultState(state.CurrentTestResultStatus, state.CurrentTestResultLabel,
                                state.CurrentTestResultSite), state.CurrentTestMessage, state.CurrentTestStrackTrace);
            state.Reset();
            if (PerformanceTest.Active.Failed)
            {
                context.CurrentResult.SetResult(ResultState.Failure);
            }
            PerformanceTest.EndTest(context.CurrentTest);
        }
Пример #3
0
 public IEnumerator BeforeTest(ITest test)
 {
     PerformanceTest.StartTest(test);
     yield return(null);
 }
Пример #4
0
        public IEnumerable ExecuteEnumerable(ITestExecutionContext context)
        {
            PerformanceTest.StartTest(context.CurrentTest);
            var logCollector = new LogScope();

            if (!(innerCommand is IEnumerableTestMethodCommand))
            {
                Execute(context);
                yield break;
            }

            var enumerableTestMethodCommand = (IEnumerableTestMethodCommand)innerCommand;

            IEnumerable executeEnumerable;

            try
            {
                executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(context);
            }
            catch (Exception e)
            {
                context.CurrentResult.RecordException(e);
                yield break;
            }

            foreach (var step in executeEnumerable)
            {
                try
                {
                    if (logCollector.AnyFailingLogs())
                    {
                        var failingLog = logCollector.FailingLogs[0];
                        throw new UnhandledLogMessageException(failingLog);
                    }
                }
                catch (Exception e)
                {
                    context.CurrentResult.RecordException(e);
                    break;
                }

                yield return(step);
            }

            try
            {
                if (logCollector.AnyFailingLogs())
                {
                    var failingLog = logCollector.FailingLogs[0];
                    throw new UnhandledLogMessageException(failingLog);
                }

                logCollector.ProcessExpectedLogs();
                if (logCollector.ExpectedLogs.Count > 0)
                {
                    throw new UnexpectedLogMessageException(LogScope.Current.ExpectedLogs.Peek());
                }
            }
            catch (Exception exception)
            {
                context.CurrentResult.RecordException(exception);
            }

            logCollector.Dispose();
            if (PerformanceTest.Active.Failed)
            {
                context.CurrentResult.SetResult(ResultState.Failure);
            }
            PerformanceTest.EndTest(context.CurrentTest);
        }