暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

EnumerableRepeatedTestCommand.cs 2.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using System;
  2. using System.Collections;
  3. using System.Reflection;
  4. using NUnit.Framework;
  5. using NUnit.Framework.Interfaces;
  6. using NUnit.Framework.Internal;
  7. using NUnit.Framework.Internal.Commands;
  8. using UnityEngine.TestRunner.NUnitExtensions.Runner;
  9. namespace UnityEngine.TestTools
  10. {
  11. internal class EnumerableRepeatedTestCommand : DelegatingTestCommand, IEnumerableTestMethodCommand
  12. {
  13. private int repeatCount;
  14. public EnumerableRepeatedTestCommand(RepeatAttribute.RepeatedTestCommand commandToReplace) : base(commandToReplace.GetInnerCommand())
  15. {
  16. repeatCount = (int)typeof(RepeatAttribute.RepeatedTestCommand)
  17. .GetField("repeatCount", BindingFlags.NonPublic | BindingFlags.Instance)
  18. .GetValue(commandToReplace);
  19. }
  20. public override TestResult Execute(ITestExecutionContext context)
  21. {
  22. throw new NotImplementedException("Use ExecuteEnumerable");
  23. }
  24. public IEnumerable ExecuteEnumerable(ITestExecutionContext context)
  25. {
  26. var unityContext = (UnityTestExecutionContext)context;
  27. int count = unityContext.EnumerableTestState.Repeat;
  28. var firstCycleAfterResume = count > 0;
  29. while (count < repeatCount || (firstCycleAfterResume && count <= repeatCount))
  30. {
  31. if (!firstCycleAfterResume)
  32. {
  33. count++;
  34. }
  35. firstCycleAfterResume = false;
  36. unityContext.EnumerableTestState.Repeat = count;
  37. if (innerCommand is IEnumerableTestMethodCommand)
  38. {
  39. var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context);
  40. foreach (var iterator in executeEnumerable)
  41. {
  42. yield return iterator;
  43. }
  44. }
  45. else
  46. {
  47. context.CurrentResult = innerCommand.Execute(context);
  48. }
  49. if (context.CurrentResult.ResultState != ResultState.Success)
  50. {
  51. break;
  52. }
  53. }
  54. unityContext.EnumerableTestState.Repeat = 0;
  55. }
  56. }
  57. }