public void CreateInterceptableMethod_Adds_Fields_Methods_And_Mapping() { var moduleScope = new ModuleScope(); var generator = new ProxyGenerator(moduleScope); var typeDefinition = generator.GetTypeDefinition(typeof(TypeScope1), null, null); TypeBuilder typeBulder = moduleScope.Module.DefineType(typeDefinition.FullName, typeDefinition.TypeAttributes); var proxyScope = new ProxyScope(moduleScope, typeBulder, typeDefinition); // proxyScope.DefineTypeAndMembers(); proxyScope.GetType().GetMethod("CreateFields", BindingFlags.NonPublic | BindingFlags.Instance).Invoke(proxyScope, new object[0]); Assert.AreEqual(1, proxyScope.Fields.Count); Assert.AreEqual(0, proxyScope.Properties.Count); Assert.AreEqual(0, proxyScope.Methods.Count); var m = proxyScope.CreateInterceptableMethod(typeDefinition.MethodDefinitions[0], typeDefinition.MethodDefinitions[0].Method); Assert.AreEqual(3, proxyScope.Fields.Count); Assert.AreEqual("TypeScope1_Method", proxyScope.Fields[1].Name); Assert.AreEqual("TypeScope1_Proxy_Method", proxyScope.Fields[2].Name); Assert.AreEqual(2, proxyScope.Methods.Count); Assert.AreEqual("Method_Callback", proxyScope.Methods[0].Name); Assert.AreEqual("Method", proxyScope.Methods[1].Name); var acc = new TypeAccessor(proxyScope); var mappings = acc.Fields["methodMappings"].GetValue() as List <MethodMapping>; Assert.AreEqual(1, mappings.Count); Assert.AreEqual("TypeScope1_Method", mappings[0].MemberField.Name); Assert.AreEqual("TypeScope1_Proxy_Method", mappings[0].MethodField.Name); Assert.AreEqual("Method", mappings[0].Method.Name); Assert.AreEqual("Method", mappings[0].MethodBuilder.Name); }