public void Intercept(IInvocation invocation) { RuntimeContext runtimeContext; IRuntimeInvocation runtimeInvocation; IRuntimeInterception runtimeInterception; if ((object)invocation == null) { throw new ArgumentNullException(nameof(invocation)); } runtimeContext = new RuntimeContext(); runtimeContext.ContinueInterception = true; runtimeInvocation = new RuntimeInvocation(invocation.Proxy, /*invocation.TargetType*/ invocation.Method.DeclaringType, invocation.Method, invocation.Arguments, invocation.InvocationTarget); for (int index = 0; index < this.RuntimeInterceptionChain.Length && runtimeContext.ContinueInterception; index++) { runtimeContext.InterceptionCount = this.RuntimeInterceptionChain.Length + 1; runtimeContext.InterceptionIndex = index; runtimeInterception = this.RuntimeInterceptionChain[index]; runtimeInterception.Invoke(runtimeInvocation, runtimeContext); } }
public void ShouldCloneInvokeTest() { MockRuntimeInterception mockRuntimeInterception; IRuntimeInvocation mockRuntimeInvocation; IRuntimeContext mockRuntimeContext; object proxyInstance; Type proxiedType; MethodInfo invokedMethodInfo; object[] invocationParameters; object returnValue; proxyInstance = new object(); proxiedType = typeof(IMockCloneable); invokedMethodInfo = typeof(IMockCloneable).GetMethod("Clone"); invocationParameters = new object[] { }; mockRuntimeInvocation = new RuntimeInvocation(proxyInstance, proxiedType, invokedMethodInfo, invocationParameters, null); mockRuntimeContext = null; mockRuntimeInterception = new MockRuntimeInterception(); mockRuntimeInterception.Invoke(mockRuntimeInvocation, mockRuntimeContext); returnValue = mockRuntimeInvocation.InvocationReturnValue; Assert.IsNull(returnValue); Assert.AreEqual("IMockCloneable::Clone", mockRuntimeInterception.LastOperationName); }
public void ShouldDisposeInvokeTest() { MockRuntimeInterception mockRuntimeInterception; IRuntimeInvocation mockRuntimeInvocation; IRuntimeContext mockRuntimeContext; object proxyInstance; Type proxiedType; MethodInfo invokedMethodInfo; object[] invocationParameters; object returnValue; proxyInstance = new object(); proxiedType = typeof(IDisposable); invokedMethodInfo = typeof(IDisposable).GetMethod("Dispose"); invocationParameters = new object[] { }; mockRuntimeInvocation = new RuntimeInvocation(proxyInstance, proxiedType, invokedMethodInfo, invocationParameters, null); mockRuntimeContext = null; mockRuntimeInterception = new MockRuntimeInterception(); mockRuntimeInterception.Invoke(mockRuntimeInvocation, mockRuntimeContext); returnValue = mockRuntimeInvocation.InvocationReturnValue; Assert.IsNull(returnValue); Assert.IsTrue(mockRuntimeInterception.Disposed); }
public void ShouldFailOnNullInputParameterInvokeTest() { MockRuntimeInterception mockRuntimeInterception; IRuntimeInvocation mockRuntimeInvocation; IRuntimeContext mockRuntimeContext; object proxyInstance; Type proxiedType; MethodInfo invokedMethodInfo; object[] invocationParameters; proxyInstance = new object(); proxiedType = typeof(IMockObject); invokedMethodInfo = typeof(IMockObject).GetMethod("ToString"); invocationParameters = null; mockRuntimeInvocation = new RuntimeInvocation(proxyInstance, proxiedType, invokedMethodInfo, invocationParameters, null); mockRuntimeContext = null; mockRuntimeInterception = new MockRuntimeInterception(); mockRuntimeInterception.Invoke(mockRuntimeInvocation, mockRuntimeContext); }
public void ShouldToStringInvokeTest() { MockRuntimeInterception mockRuntimeInterception; IRuntimeInvocation mockRuntimeInvocation; IRuntimeContext mockRuntimeContext; object proxyInstance; Type proxiedType; MethodInfo invokedMethodInfo; object[] invocationParameters; object returnValue; proxyInstance = new object(); proxiedType = typeof(IMockObject); invokedMethodInfo = typeof(IMockObject).GetMethod("ToString"); invocationParameters = new object[] { }; mockRuntimeInvocation = new RuntimeInvocation(proxyInstance, proxiedType, invokedMethodInfo, invocationParameters, null); mockRuntimeContext = null; mockRuntimeInterception = new MockRuntimeInterception(); mockRuntimeInterception.Invoke(mockRuntimeInvocation, mockRuntimeContext); returnValue = mockRuntimeInvocation.InvocationReturnValue; Assert.AreEqual(typeof(IMockObject).FullName, returnValue); }