HandleFatalException() public method

Handles the fatal exception.
public HandleFatalException ( string stage, Exception exception, Result resultPrefab, GameObject resultVertical ) : void
stage string The stage of test execution for reporting.
exception System.Exception The fatal exception.
resultPrefab Result The prefab for test result indicators.
resultVertical UnityEngine.GameObject The vertical area which test result indicators to be belonging.
return void
示例#1
0
		/// <summary>
		///		Runs specified test class as coroutine.
		/// </summary>
		/// <param name="testClass">The test class.</param>
		/// <param name="summaryReporter">The reporter object to report test class execution summary.</param>
		/// <param name="resultPrefab">The prefab for test result indicators.</param>
		/// <param name="resultVertical">The vertical area which test result indicators to be belonging.</param>
		/// <returns><see cref="IEnumerator"/> for coroutine.</returns>
		private static IEnumerator RuntTestCoroutineCore( TestClass testClass, TestSummaryReporter summaryReporter, Result resultPrefab, GameObject resultVertical )
		{ 
			bool isCrashed = false;

			try
			{
				InitializeTestEngine();
			}
			catch ( Exception ex )
			{
				summaryReporter.HandleFatalException( "InitializeTestEngine", ex, resultPrefab, resultVertical );
				summaryReporter.RecordError( testClass.MethodCount );
				isCrashed = true;
			}

			if ( isCrashed )
			{
				yield break;
			}

			yield return null;

			try
			{
				testClass.FixtureSetup();
			}
			catch ( Exception ex )
			{
				summaryReporter.HandleFatalException( "FixtureSetup", ex, resultPrefab, resultVertical );
				summaryReporter.RecordError( testClass.MethodCount );
				isCrashed = true;
			}

			if ( isCrashed )
			{
				yield break;
			}

			yield return null;

			TestClassInstance instance = null;
			try
			{
				instance = testClass.NewTest();
			}
			catch ( Exception ex )
			{
				summaryReporter.HandleFatalException( "Instantiation", ex, resultPrefab, resultVertical );
				summaryReporter.RecordError( testClass.MethodCount );
				isCrashed = true;
			}

			if ( isCrashed )
			{
				yield break;
			}

			yield return null;

			int remains = testClass.MethodCount;
			foreach ( var method in instance.TestMethods )
			{
				try
				{
					instance.TestSetup();
				}
				catch ( Exception ex )
				{
					summaryReporter.HandleFatalException( "TestSetup", ex, resultPrefab, resultVertical );
					summaryReporter.RecordError( remains );
					isCrashed = true;
				}

				if ( isCrashed )
				{
					yield break;
				}

				yield return null;

				var fullMethodName = testClass.Name + "." + method.Name;
				
				try
				{
					method.Method();
					summaryReporter.RecordSuccess();
					// Omit test result to reduce memory usage and avoid cluttered screen.
				}
				catch ( Exception ex )
				{
					if ( IsTestSkipping( ex ) )
					{
						summaryReporter.RecordSkip();
					}
					else
					{
						bool isFailure = IsTestFailure( ex );
						var messageHeader = summaryReporter.FormatMethodName( method.Name ) + ( isFailure ? " NG" : " Error" ) + Environment.NewLine;
						UnityEngine.Debug.LogError( messageHeader + ex );
						var r = CreateResult( fullMethodName, resultPrefab, resultVertical );
						var baseException = ex.GetBaseException();
						if ( isFailure || baseException == ex )
						{
							r.Message.Value = messageHeader + ex.Message;
						}
						else
						{
							// Record BaseException to help investigation.
							r.Message.Value = messageHeader + ex.Message + "-->" + Environment.NewLine + baseException.Message;
						}

						r.Color.Value = UnityEngine.Color.red;

						if ( isFailure )
						{
							summaryReporter.RecordFailure();
						}
						else
						{
							summaryReporter.RecordError();
						}
					}
				}

				remains--;

				yield return null;

				try
				{
					instance.TestCleanup();
				}
				catch ( Exception ex )
				{
					summaryReporter.HandleFatalException( "TestCleanup", ex, resultPrefab, resultVertical );
					summaryReporter.RecordError( remains );
					isCrashed = true;
				}

				if ( isCrashed )
				{
					yield break;
				}

				yield return null;
			} // foreach method

			try
			{
				testClass.FixtureCleanup();
			}
			catch ( Exception ex )
			{
				summaryReporter.HandleFatalException( "FixtureCleanup", ex, resultPrefab, resultVertical );
				isCrashed = true;
			}

			if ( isCrashed )
			{
				yield break;
			}

			yield return null;

			try
			{
				CleanUpTestEngine();
			}
			catch ( Exception ex )
			{
				summaryReporter.HandleFatalException( "CleanupTestEngine", ex, resultPrefab, resultVertical );
			}

			yield return null;
		}
示例#2
0
        /// <summary>
        ///		Runs specified test class as coroutine.
        /// </summary>
        /// <param name="testClass">The test class.</param>
        /// <param name="summaryReporter">The reporter object to report test class execution summary.</param>
        /// <param name="resultPrefab">The prefab for test result indicators.</param>
        /// <param name="resultVertical">The vertical area which test result indicators to be belonging.</param>
        /// <returns><see cref="IEnumerator"/> for coroutine.</returns>
        private static IEnumerator RuntTestCoroutineCore(TestClass testClass, TestSummaryReporter summaryReporter, Result resultPrefab, GameObject resultVertical)
        {
            bool isCrashed = false;

            try
            {
                InitializeTestEngine();
            }
            catch (Exception ex)
            {
                summaryReporter.HandleFatalException("InitializeTestEngine", ex, resultPrefab, resultVertical);
                summaryReporter.RecordError(testClass.MethodCount);
                isCrashed = true;
            }

            if (isCrashed)
            {
                yield break;
            }

            yield return(null);

            try
            {
                testClass.FixtureSetup();
            }
            catch (Exception ex)
            {
                summaryReporter.HandleFatalException("FixtureSetup", ex, resultPrefab, resultVertical);
                summaryReporter.RecordError(testClass.MethodCount);
                isCrashed = true;
            }

            if (isCrashed)
            {
                yield break;
            }

            yield return(null);

            TestClassInstance instance = null;

            try
            {
                instance = testClass.NewTest();
            }
            catch (Exception ex)
            {
                summaryReporter.HandleFatalException("Instantiation", ex, resultPrefab, resultVertical);
                summaryReporter.RecordError(testClass.MethodCount);
                isCrashed = true;
            }

            if (isCrashed)
            {
                yield break;
            }

            yield return(null);

            int remains = testClass.MethodCount;

            foreach (var method in instance.TestMethods)
            {
                try
                {
                    instance.TestSetup();
                }
                catch (Exception ex)
                {
                    summaryReporter.HandleFatalException("TestSetup", ex, resultPrefab, resultVertical);
                    summaryReporter.RecordError(remains);
                    isCrashed = true;
                }

                if (isCrashed)
                {
                    yield break;
                }

                yield return(null);

                var fullMethodName = testClass.Name + "." + method.Name;

                try
                {
                    method.Method();
                    summaryReporter.RecordSuccess();
                    // Omit test result to reduce memory usage and avoid cluttered screen.
                }
                catch (Exception ex)
                {
                    if (IsTestSkipping(ex))
                    {
                        summaryReporter.RecordSkip();
                    }
                    else
                    {
                        bool isFailure     = IsTestFailure(ex);
                        var  messageHeader = summaryReporter.FormatMethodName(method.Name) + (isFailure ? " NG" : " Error") + Environment.NewLine;
                        UnityEngine.Debug.LogError(messageHeader + ex);
                        var r             = CreateResult(fullMethodName, resultPrefab, resultVertical);
                        var baseException = ex.GetBaseException();
                        if (isFailure || baseException == ex)
                        {
                            r.Message.Value = messageHeader + ex.Message;
                        }
                        else
                        {
                            // Record BaseException to help investigation.
                            r.Message.Value = messageHeader + ex.Message + "-->" + Environment.NewLine + baseException.Message;
                        }

                        r.Color.Value = UnityEngine.Color.red;

                        if (isFailure)
                        {
                            summaryReporter.RecordFailure();
                        }
                        else
                        {
                            summaryReporter.RecordError();
                        }
                    }
                }

                remains--;

                yield return(null);

                try
                {
                    instance.TestCleanup();
                }
                catch (Exception ex)
                {
                    summaryReporter.HandleFatalException("TestCleanup", ex, resultPrefab, resultVertical);
                    summaryReporter.RecordError(remains);
                    isCrashed = true;
                }

                if (isCrashed)
                {
                    yield break;
                }

                yield return(null);
            }             // foreach method

            try
            {
                testClass.FixtureCleanup();
            }
            catch (Exception ex)
            {
                summaryReporter.HandleFatalException("FixtureCleanup", ex, resultPrefab, resultVertical);
                isCrashed = true;
            }

            if (isCrashed)
            {
                yield break;
            }

            yield return(null);

            try
            {
                CleanUpTestEngine();
            }
            catch (Exception ex)
            {
                summaryReporter.HandleFatalException("CleanupTestEngine", ex, resultPrefab, resultVertical);
            }

            yield return(null);
        }