public void Respond_Should_Protect_Against_Throw_And_Throws_Or_Returns(ExceptionOrReturn <string> response) { var mockSetup = new Mock <ISetup <IToMock, string> >(); var callOrder = new List <int>(); mockSetup.Setup(m => m.Throws(null)).Callback(() => { callOrder.Add(1); }); if (response.Return != null) { mockSetup.Setup(m => m.Returns(response.Return)).Callback(() => { callOrder.Add(2); }); } else { mockSetup.Setup(m => m.Throws(response.Exception)).Callback(() => { callOrder.Add(2); }); } var responses = new Mock <IInvocationResponses <ExceptionOrReturn <string> > >().Object; var passOrThrowResponder = new ExceptionsOrReturnsInvocationResponder <IToMock, string>(mockSetup.Object, responses, 0); var respondMethod = typeof(ExceptionsOrReturnsInvocationResponder <IToMock, string>).GetMethod("Respond", BindingFlags.Instance | BindingFlags.NonPublic); respondMethod.Invoke(passOrThrowResponder, new object[] { response }); Assert.That(callOrder, Is.EquivalentTo(new int[] { 1, 2 })); }
public void RespondExhausted_Should_Protect_Against_Throw_And_Return_Default_Return() { var mockSetup = new Mock <ISetup <IToMock, TReturn> >(); var callOrder = new List <int>(); mockSetup.Setup(m => m.Throws(null)).Callback(() => { callOrder.Add(1); }); mockSetup.Setup(m => m.Returns(expectedDefault)).Callback(() => { callOrder.Add(2); }); var responses = CreateResponses(); var passOrThrowResponder = new ExceptionsOrReturnsInvocationResponder <IToMock, TReturn>(mockSetup.Object, responses, 0); var respondMethod = typeof(ExceptionsOrReturnsInvocationResponder <IToMock, TReturn>).GetMethod("RespondExhausted", BindingFlags.Instance | BindingFlags.NonPublic); respondMethod.Invoke(passOrThrowResponder, new object[] { }); Assert.That(callOrder, Is.EquivalentTo(new int[] { 1, 2 })); }