public void CanInterceptAbstractClassWithVirtualMethodInterceptor() { bool invoked = false; IInterceptionBehavior interceptionBehavior = new DelegateInterceptionBehavior((mi, next) => { invoked = true; return mi.CreateMethodReturn(100); }); AbstractClass instance = Intercept.NewInstance<AbstractClass>( new VirtualMethodInterceptor(), new[] { interceptionBehavior }); int value = instance.DoSomething(); Assert.AreEqual(100, value); Assert.IsTrue(invoked); }
public void CanInterceptNewInstanceWithTypeInterceptorUsingGenericVersion() { bool invoked = false; IInterceptionBehavior interceptionBehavior = new DelegateInterceptionBehavior((mi, next) => { invoked = true; return mi.CreateMethodReturn(100); }); BaseClass instance = Intercept.NewInstanceWithAdditionalInterfaces<BaseClass>( new VirtualMethodInterceptor(), new[] { interceptionBehavior }, Type.EmptyTypes, 10); int value = instance.DoSomething(); Assert.AreEqual(100, value); Assert.IsTrue(invoked); }
public void GeneratedProxyImplementsUserProvidedAdditionalInterfaces() { bool invoked = false; IInterceptionBehavior interceptionBehavior = new DelegateInterceptionBehavior((mi, next) => { invoked = true; return mi.CreateMethodReturn(100); }); IInterface proxy = (IInterface) Intercept.ThroughProxyWithAdditionalInterfaces( typeof(IInterface), new BaseClass(10), new InterfaceInterceptor(), new[] { interceptionBehavior }, new[] { typeof(ISomeInterface) }); int value = ((ISomeInterface)proxy).DoSomethingElse(); Assert.AreEqual(100, value); Assert.IsTrue(invoked); }
public void CanInterceptTargetWithInstanceInterceptor() { bool invoked = false; IInterceptionBehavior interceptionBehavior = new DelegateInterceptionBehavior((mi, next) => { invoked = true; return mi.CreateMethodReturn(100); }); IInterface proxy = (IInterface) Intercept.ThroughProxyWithAdditionalInterfaces( typeof(IInterface), new BaseClass(10), new InterfaceInterceptor(), new[] { interceptionBehavior }, Type.EmptyTypes); int value = proxy.DoSomething(); Assert.AreEqual(100, value); Assert.IsTrue(invoked); }