public void TargetReturnsReferenceType_DelegateReturnsValueType_ThrowsException() { var instance = new ObscenelyAnnoyingClass(); object arg = new ClassA(); var methodToInvoke = MethodReference.Get(() => instance.ReturnInputObject(arg)); // Throws Assert.ThrowsAny <Exception>(() => MethodBuilder <Func <object, object, int> > .Start(_moduleVersionId, methodToInvoke.MetadataToken, (int)OpCodeValue.Callvirt, "ReturnInputObject") .WithConcreteType(typeof(ObscenelyAnnoyingClass)) .WithParameters(arg) .Build()); }
public void TargetReturnsObject_DelegateReturnsObject_IsOk() { var instance = new ObscenelyAnnoyingClass(); object arg = new ClassA(); var methodToInvoke = MethodReference.Get(() => instance.ReturnInputObject(arg)); var methodCall = MethodBuilder <Func <object, object, object> > .Start(_moduleVersionId, methodToInvoke.MetadataToken, (int)OpCodeValue.Callvirt, "ReturnInputObject") .WithConcreteType(typeof(ObscenelyAnnoyingClass)) .WithParameters(arg) .Build(); var actual = methodCall(instance, arg); Assert.Equal(arg, actual); }