public TestModes DetermineTestMode(params object[] requestArgs) { var requestedMode = TestFlaskContext.RequestedMode; if (requestedMode == TestModes.Record || requestedMode == TestModes.NoMock) { return(requestedMode); } else { if (TestFlaskContext.LoadedStep == null && TestFlaskContext.CurrentDepth == 1) { TestFlaskContext.LoadedStep = api.GetStep(requestedInvocation.StepNo); } Invocation existingInvocation = TestFlaskContext.GetInvocation(requestedInvocation.InstanceHashCode); if (existingInvocation != null) { if (requestedMode == TestModes.Assert) { mustPersistAssertionResult = (TestFlaskContext.CurrentDepth == 1); } //lookup existing invocation and determine test mode return(existingInvocation.IsReplayable ? TestModes.Play : TestModes.NoMock); } else { //cannot find same invocation return(TestModes.NoMock); } } }
protected void EndInvocation(object result = null) { TestFlaskContext.CurrentDepth--; if (mustPersistAssertionResult && result != null) { Invocation rootInvocation = TestFlaskContext.GetRootInvocation(); rootInvocation.AssertionResult = JsonConvert.SerializeObject(result); api.PutInvocation(rootInvocation); //persist assertion result } }
public void Play(params object[] requestArgs) { var loadedInvocation = TestFlaskContext.GetInvocation(requestedInvocation.InstanceHashCode); if (!loadedInvocation.IsFaulted) { EndInvocation(); } else { var exception = (Exception)JsonConvert.DeserializeObject(loadedInvocation.Exception, Type.GetType(loadedInvocation.ExceptionType)); EndInvocation(exception); throw exception; } }