Ejemplo n.º 1
0
            public void GivenBuiltProxyWithMixin_WhenMemberIsCalled_ThenMixinMemberIsIntecepted()
            {
                var subjectBuilder = new DynamicProxyBuilder();

                // Given
                var aInterceptor = new InterceptorA();
                var abMixin      = new MixinAB(mixinAProperty: 4);
                var proxy        = subjectBuilder
                                   .ForClass <ClassA>()
                                   .WithoutTraget()
                                   .AddInterceptor(aInterceptor)
                                   .WithMixin(abMixin)
                                   .Build();

                // When
                int aValue = 0;

                proxy.AMethod(() => aValue += 5);
                (proxy as IMixinA).MixinAMethod(() => aValue += 5);
                (proxy as IMixinB).MixinBMethod(() => aValue += 5);

                // Then
                Assert.IsTrue(ProxyUtil.IsProxy(proxy), "object is not a proxy");
                Assert.AreEqual(3, aInterceptor.InterceptReceivedCall);
                Assert.AreEqual(4, (proxy as IMixinA).MixinAProperty);
                Assert.AreEqual(15, aValue);
            }
            public void GivenBuiltProxyWithTargetAndMixin_WhenMemberIsCalled_ThenMixinMemberIsIntercepted()
            {
                var subjectBuilder = new DynamicProxyBuilder();

                // Given
                var aTarget = new ClassA();

                aTarget.AP1 = "val1";
                var aInterceptor = new InterceptorA();
                var abMixin      = new MixinAB(mixinAProperty: 2)
                {
                    MixinBProperty = 3
                };
                var proxy = subjectBuilder
                            .ForClass <ClassA>()
                            .WithTarget(aTarget)
                            .AddInterceptor(aInterceptor)
                            .WithMixin(abMixin)
                            .Build();

                // When
                int aValue = 0;

                proxy.AMethod(() => aValue += 5);
                (proxy as IMixinA).MixinAMethod(() => aValue += 5);
                (proxy as IMixinB).MixinBMethod(() => aValue += 5);

                var ret1_AP1            = proxy.AP1;
                var ret1_MixinAProperty = (proxy as IMixinA).MixinAProperty;
                var ret1_MixinBProperty = (proxy as IMixinB).MixinBProperty;

                proxy.AP1 = "val2";
                (proxy as IMixinB).MixinBProperty = 4;
                var ret2_AP1            = proxy.AP1;
                var ret2_MixinBProperty = (proxy as IMixinB).MixinBProperty;


                // Then
                Assert.IsTrue(ProxyUtil.IsProxy(proxy), "object is not a proxy");
                Assert.AreEqual(10, aInterceptor.InterceptReceivedCall);
                Assert.AreEqual(15, aValue);
                Assert.AreEqual("val1", ret1_AP1);
                Assert.AreEqual("val2", ret2_AP1);
                Assert.AreEqual(2, ret1_MixinAProperty);
                Assert.AreEqual(3, ret1_MixinBProperty);
                Assert.AreEqual(4, ret2_MixinBProperty);
            }