예제 #1
0
        List <Tuple <MethodInfo, object> > SlurpAllNullEventHandlers(bool forceNoNull)
        {
            List <Tuple <MethodInfo, object> > retVal = new List <Tuple <MethodInfo, object> >();

            if (forceNoNull)
            {
                return(retVal);
            }

            // Adding NULL static methods (if any)
            if (_staticEvents.ContainsKey(""))
            {
                foreach (Tuple <MethodInfo, object> idx in _staticEvents[""])
                {
                    retVal.Add(idx);
                }
            }

            // Adding NULL instance methods (if any)
            if (InstanceMethod.ContainsKey(""))
            {
                foreach (Tuple <MethodInfo, object> idx in InstanceMethod[""])
                {
                    retVal.Add(idx);
                }
            }
            return(retVal);
        }
예제 #2
0
    private void Awake()
    {
        Test = 10;

        string hotfixMonoBehaviourFullName = "HotFix_Project." + m_HotfixMonoBehaviourName;

        if (HotfixManager.Instance.ILRuntimeMode)
        {
            IType type = HotfixManager.Instance.Appdomain.LoadedTypes[hotfixMonoBehaviourFullName];
            HotfixInstance = ((ILType)type).Instantiate();

            m_Start  = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Start", 0);
            m_Update = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Update", 0);
            m_Test   = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Test", 1);

            HotfixManager.Instance.Appdomain.Invoke(hotfixMonoBehaviourFullName, "Awake", HotfixInstance, this);
        }
        else
        {
            HotfixInstance = HotfixManager.Instance.HotfixAssembly.CreateInstance(hotfixMonoBehaviourFullName);

            InstanceMethod awake = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Awake", new Type[] { typeof(MainMonoBehaviour) });
            m_Start  = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Start", null);
            m_Update = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Update", null);
            m_Test   = new InstanceMethod(HotfixInstance, hotfixMonoBehaviourFullName, "Test", new Type[] { typeof(int) });

            awake?.Invoke(this);
        }
        m_Test.Invoke(5);
    }
예제 #3
0
        // TODO: Try to remove or make internal somehow...?
        public void RemoveListener(object context)
        {
            List <string> toRemoKeys = new List <string>();

            // Removing all event handler with the given context (object instance)
            foreach (string idx in InstanceMethod.Keys)
            {
                List <Tuple <MethodInfo, object> > idxCur   = InstanceMethod[idx];
                List <Tuple <MethodInfo, object> > toRemove =
                    new List <Tuple <MethodInfo, object> >();
                foreach (Tuple <MethodInfo, object> idxObj in idxCur)
                {
                    if (idxObj.Item2 == context)
                    {
                        toRemove.Add(idxObj);
                    }
                }
                foreach (Tuple <MethodInfo, object> idxObj in toRemove)
                {
                    idxCur.Remove(idxObj);
                    if (idxCur.Count == 0)
                    {
                        toRemoKeys.Add(idx);
                    }
                }
            }
            foreach (string idx in toRemoKeys)
            {
                InstanceMethod.Remove(idx);
            }
        }
예제 #4
0
        public void SlamInstance()
        {
            InstanceMethod original = new InstanceMethod();

            Log.Output(@" Current Value of IntanceMethod.Add(1,1) = " + original.Add(1, 1).ToString());

            Injector.SlamClass(typeof(InstanceMethod), typeof(InstanceMethod_NewMath));
            Log.Output(" New Value of IntanceMethod.Add(1,1) = " + original.Add(1, 1).ToString());
        }
예제 #5
0
        public void SutIsEquatable()
        {
            // Arrange
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner  = new object();
            // Act
            var sut = new InstanceMethod(dummyMethod, dummyOwner);

            // Assert
            Assert.IsAssignableFrom <IEquatable <InstanceMethod> >(sut);
        }
예제 #6
0
 public void SutIsMethod()
 {
     // Fixture setup
     var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var dummyOwner = new object();
     // Exercise system
     var sut = new InstanceMethod(dummyMethod, dummyOwner);
     // Verify outcome
     Assert.IsAssignableFrom<IMethod>(sut);
     // Teardown
 }
예제 #7
0
        public void SutDoesNotEqualSomeOtherObject()
        {
            // Arrange
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner  = new object();
            var sut         = new InstanceMethod(dummyMethod, dummyOwner);
            // Act
            var result = sut.Equals(new object());

            // Assert
            Assert.False(result);
        }
예제 #8
0
        public void SutIsEquatable()
        {
            // Fixture setup
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner  = new object();
            // Exercise system
            var sut = new InstanceMethod(dummyMethod, dummyOwner);

            // Verify outcome
            Assert.IsAssignableFrom <IEquatable <InstanceMethod> >(sut);
            // Teardown
        }
예제 #9
0
        public void MethodIsCorrect(Type type)
        {
            // Arrange
            var expectedMethod = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner     = new object();
            var sut            = new InstanceMethod(expectedMethod, dummyOwner);
            // Act
            MethodInfo result = sut.Method;

            // Assert
            Assert.Equal(expectedMethod, result);
        }
예제 #10
0
        public void OwnerIsCorrect()
        {
            // Arrange
            var dummyMethod   = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var expectedOwner = new object();
            var sut           = new InstanceMethod(dummyMethod, expectedOwner);
            // Act
            var result = sut.Owner;

            // Assert
            Assert.Equal(expectedOwner, result);
        }
예제 #11
0
 public void MethodIsCorrect(Type type)
 {
     // Fixture setup
     var expectedMethod = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var dummyOwner = new object();
     var sut = new InstanceMethod(expectedMethod, dummyOwner);
     // Exercise system
     MethodInfo result = sut.Method;
     // Verify outcome
     Assert.Equal(expectedMethod, result);
     // Teardown
 }
예제 #12
0
 public void OwnerIsCorrect()
 {
     // Fixture setup
     var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var expectedOwner = new object();
     var sut = new InstanceMethod(dummyMethod, expectedOwner);
     // Exercise system
     var result = sut.Owner;
     // Verify outcome
     Assert.Equal(expectedOwner, result);
     // Teardown
 }
예제 #13
0
        public void InvokeParameterlessMethodReturnsCorrectResult(object owner)
        {
            // Arrange
            var method = owner.GetType().GetMethod("GetHashCode", Type.EmptyTypes);
            var sut    = new InstanceMethod(method, owner);
            // Act
            var result = sut.Invoke(Enumerable.Empty <object>());
            // Assert
            var expected = owner.GetHashCode();

            Assert.Equal(expected, result);
        }
예제 #14
0
        public void OwnerIsCorrect()
        {
            // Fixture setup
            var dummyMethod   = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var expectedOwner = new object();
            var sut           = new InstanceMethod(dummyMethod, expectedOwner);
            // Exercise system
            var result = sut.Owner;

            // Verify outcome
            Assert.Equal(expectedOwner, result);
            // Teardown
        }
예제 #15
0
        public void MethodIsCorrect(Type type)
        {
            // Fixture setup
            var expectedMethod = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner     = new object();
            var sut            = new InstanceMethod(expectedMethod, dummyOwner);
            // Exercise system
            MethodInfo result = sut.Method;

            // Verify outcome
            Assert.Equal(expectedMethod, result);
            // Teardown
        }
예제 #16
0
        public void InvokeParameterlessMethodReturnsCorrectResult(object owner)
        {
            // Fixture setup
            var method = owner.GetType().GetMethod("GetHashCode", Type.EmptyTypes);
            var sut    = new InstanceMethod(method, owner);
            // Exercise system
            var result = sut.Invoke(Enumerable.Empty <object>());
            // Verify outcome
            var expected = owner.GetHashCode();

            Assert.Equal(expected, result);
            // Teardown
        }
예제 #17
0
        public void SutDoesNotEqualSomeOtherObject()
        {
            // Fixture setup
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner  = new object();
            var sut         = new InstanceMethod(dummyMethod, dummyOwner);
            // Exercise system
            var result = sut.Equals(new object());

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
예제 #18
0
        public void GetHashCodeReturnsCorrectResult()
        {
            // Arrange
            var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner  = new object();
            var sut    = new InstanceMethod(method, owner);
            // Act
            var result = sut.GetHashCode();
            // Assert
            var expectedHasCode = method.GetHashCode() ^ owner.GetHashCode();

            Assert.Equal(expectedHasCode, result);
        }
예제 #19
0
        public void InvokeMethodWithParametersReturnsCorrectResult(int x, int y)
        {
            // Arrange
            var owner  = Comparer <int> .Default;
            var method = owner.GetType().GetMethod("Compare");
            var sut    = new InstanceMethod(method, owner);
            // Act
            var result = sut.Invoke(new object[] { x, y });
            // Assert
            var expected = owner.Compare(x, y);

            Assert.Equal(expected, result);
        }
예제 #20
0
        public void SutEqualsOtherSutWithSameValues()
        {
            // Arrange
            var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner  = new object();
            var sut    = new InstanceMethod(method, owner);
            var other  = new InstanceMethod(method, owner);
            // Act
            var result = sut.Equals(other);

            // Assert
            Assert.True(result);
        }
예제 #21
0
        public void SutEqualsOtherSutWithSameValues()
        {
            // Fixture setup
            var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner  = new object();
            var sut    = new InstanceMethod(method, owner);
            var other  = new InstanceMethod(method, owner);
            // Exercise system
            var result = sut.Equals(other);

            // Verify outcome
            Assert.True(result);
            // Teardown
        }
예제 #22
0
        public void GetHashCodeReturnsCorrectResult()
        {
            // Fixture setup
            var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner  = new object();
            var sut    = new InstanceMethod(method, owner);
            // Exercise system
            var result = sut.GetHashCode();
            // Verify outcome
            var expectedHasCode = method.GetHashCode() ^ owner.GetHashCode();

            Assert.Equal(expectedHasCode, result);
            // Teardown
        }
예제 #23
0
        public void InvokeMethodWithParametersReturnsCorrectResult(int x, int y)
        {
            // Fixture setup
            var owner  = Comparer <int> .Default;
            var method = owner.GetType().GetMethod("Compare");
            var sut    = new InstanceMethod(method, owner);
            // Exercise system
            var result = sut.Invoke(new object[] { x, y });
            // Verify outcome
            var expected = owner.Compare(x, y);

            Assert.Equal(expected, result);
            // Teardown
        }
예제 #24
0
        // TODO: WTF ...?

        /**
         * Returns true if Active Event is an override of an existing active event
         */
        public bool IsOverrideSystem(string key)
        {
            bool retVal = _eventMappers.ContainsKey(key);

            if (retVal)
            {
                retVal = InstanceMethod.ContainsKey(key);
                if (!retVal)
                {
                    retVal = _staticEvents.ContainsKey(key);
                }
            }
            return(retVal);
        }
예제 #25
0
        public void ParametersReturnsCorrectResult(Type type, int index)
        {
            // Arrange
            var method             = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).ElementAt(index);
            var expectedParameters = method.GetParameters();

            var dummyOwner = new object();
            var sut        = new InstanceMethod(method, dummyOwner);
            // Act
            var result = sut.Parameters;

            // Assert
            Assert.True(expectedParameters.SequenceEqual(result));
        }
예제 #26
0
        public void SutDoesNotEqualOtherSutWithDifferentMethod()
        {
            // Arrange
            var method1    = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner = new object();
            var sut        = new InstanceMethod(method1, dummyOwner);

            var    method2 = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).Skip(1).First();
            object other   = new InstanceMethod(method2, dummyOwner);
            // Act
            var result = sut.Equals(other);

            // Assert
            Assert.False(result);
        }
예제 #27
0
        public void ParametersReturnsCorrectResult(Type type, int index)
        {
            // Fixture setup
            var method             = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).ElementAt(index);
            var expectedParameters = method.GetParameters();

            var dummyOwner = new object();
            var sut        = new InstanceMethod(method, dummyOwner);
            // Exercise system
            var result = sut.Parameters;

            // Verify outcome
            Assert.True(expectedParameters.SequenceEqual(result));
            // Teardown
        }
예제 #28
0
        public void SutDoesNotEqualOtherSutWithDifferentOwner()
        {
            // Arrange
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner1      = new object();
            var sut         = new InstanceMethod(dummyMethod, owner1);

            var owner2 = new object();
            var other  = new InstanceMethod(dummyMethod, owner2);
            // Act
            var result = sut.Equals(other);

            // Assert
            Assert.False(result);
        }
        public void CreateExtendedCommandWithInstanceAsyncMethodReturnsMethodInvokeCommand()
        {
            var sut        = new SutAlias();
            var methodInfo = typeof(GuardClauseExtensionsTests).GetMethod(
                nameof(this.InstanceCommandHelperMethodAsync),
                BindingFlags.Instance | BindingFlags.NonPublic);
            var method  = new InstanceMethod(methodInfo, this);
            var command = CreateWrappedMethodInvokeCommand(
                method,
                new IndexedReplacement <object>(0));

            var actual = sut.CreateExtendedCommand(new Mock <ISpecimenBuilder>().Object, command);

            Assert.IsType <AsyncMethodInvokeCommand>(
                (actual as ReflectionExceptionUnwrappingCommand)?.Command);
        }
예제 #30
0
        public void SutDoesNotEqualOtherSutWithDifferentOwner()
        {
            // Fixture setup
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner1      = new object();
            var sut         = new InstanceMethod(dummyMethod, owner1);

            var owner2 = new object();
            var other  = new InstanceMethod(dummyMethod, owner2);
            // Exercise system
            var result = sut.Equals(other);

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
예제 #31
0
        public void SutDoesNotEqualOtherSutWithDifferentMethod()
        {
            // Fixture setup
            var method1    = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var dummyOwner = new object();
            var sut        = new InstanceMethod(method1, dummyOwner);

            var    method2 = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).Skip(1).First();
            object other   = new InstanceMethod(method2, dummyOwner);
            // Exercise system
            var result = sut.Equals(other);

            // Verify outcome
            Assert.False(result);
            // Teardown
        }
예제 #32
0
        /// <summary>
        /// Verifies that a method has appripriate Guard Clauses in place.
        /// </summary>
        /// <param name="methodInfo">The method.</param>
        /// <remarks>
        /// <para>
        /// Exactly which Guard Clauses are verified is defined by
        /// <see cref="BehaviorExpectation" />.
        /// </para>
        /// </remarks>
        public override void Verify(MethodInfo methodInfo)
        {
            if (methodInfo == null)
            {
                throw new ArgumentNullException("methodInfo");
            }

            if (methodInfo.IsEqualsMethod())
            {
                return;
            }

            var owner  = this.Builder.CreateAnonymous(methodInfo.ReflectedType);
            var method = new InstanceMethod(methodInfo, owner);

            this.Verify(method);
        }
예제 #33
0
        /// <summary>
        /// Verifies that a method has appripriate Guard Clauses in place.
        /// </summary>
        /// <param name="methodInfo">The method.</param>
        /// <remarks>
        /// <para>
        /// Exactly which Guard Clauses are verified is defined by
        /// <see cref="BehaviorExpectation" />.
        /// </para>
        /// </remarks>
        public override void Verify(MethodInfo methodInfo)
        {
            if (methodInfo == null)
            {
                throw new ArgumentNullException("methodInfo");
            }

            if (methodInfo.IsEqualsMethod())
            {
                return;
            }

            var owner  = this.Builder.CreateAnonymous(methodInfo.ReflectedType);
            var method = new InstanceMethod(methodInfo, owner);

            var isReturnValueIterator =
                typeof(System.Collections.IEnumerable).IsAssignableFrom(methodInfo.ReturnType) ||
                typeof(System.Collections.IEnumerator).IsAssignableFrom(methodInfo.ReturnType);

            this.Verify(method, isReturnValueIterator);
        }
예제 #34
0
 public void SutEqualsOtherSutWithSameValues()
 {
     // Fixture setup
     var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var owner = new object();
     var sut = new InstanceMethod(method, owner);
     var other = new InstanceMethod(method, owner);
     // Exercise system
     var result = sut.Equals(other);
     // Verify outcome
     Assert.True(result);
     // Teardown
 }
예제 #35
0
 public void GetHashCodeReturnsCorrectResult()
 {
     // Fixture setup
     var method = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var owner = new object();
     var sut = new InstanceMethod(method, owner);
     // Exercise system
     var result = sut.GetHashCode();
     // Verify outcome
     var expectedHasCode = method.GetHashCode() ^ owner.GetHashCode();
     Assert.Equal(expectedHasCode, result);
     // Teardown
 }
예제 #36
0
        public void ParametersReturnsCorrectResult(Type type, int index)
        {
            // Fixture setup
            var method = type.GetMethods(BindingFlags.Public | BindingFlags.Instance).ElementAt(index);
            var expectedParameters = method.GetParameters();

            var dummyOwner = new object();
            var sut = new InstanceMethod(method, dummyOwner);
            // Exercise system
            var result = sut.Parameters;
            // Verify outcome
            Assert.True(expectedParameters.SequenceEqual(result));
            // Teardown
        }
예제 #37
0
        /// <summary>
        /// Verifies that a method has appripriate Guard Clauses in place.
        /// </summary>
        /// <param name="methodInfo">The method.</param>
        /// <remarks>
        /// <para>
        /// Exactly which Guard Clauses are verified is defined by
        /// <see cref="BehaviorExpectation" />.
        /// </para>
        /// </remarks>
        public override void Verify(MethodInfo methodInfo)
        {
            if (methodInfo == null)
                throw new ArgumentNullException("methodInfo");

            if (methodInfo.IsEqualsMethod())
                return;

            var owner = this.Builder.CreateAnonymous(methodInfo.ReflectedType);
            var method = new InstanceMethod(methodInfo, owner);

            var isReturnValueIterator =
                typeof(System.Collections.IEnumerable).IsAssignableFrom(methodInfo.ReturnType) ||
                typeof(System.Collections.IEnumerator).IsAssignableFrom(methodInfo.ReturnType);

            this.Verify(method, isReturnValueIterator);
        }
예제 #38
0
        public static bool TryGetValue(object obj, string propertyName, out object value, out Type type)
        {
            value = null;
            type = typeof(object);

            if (obj is IDynamicObject)
                return ((IDynamicObject) obj).TryGetValue(propertyName, out value, out type);

            Type targetType = obj.GetType();

            MemberInfo[] members = targetType.GetMember(propertyName);

            if (members.Length == 0)
            {
                PropertyInfo indexerPropInfo = targetType.GetProperty("Item", new[] { typeof(string) });

                if (indexerPropInfo != null)
                {
                    value = indexerPropInfo.GetValue(obj, new object[] { propertyName });
                    type = (value != null && indexerPropInfo.PropertyType == typeof(object)) ? value.GetType() : typeof(object);

                    return true;
                }

                return false;
            }

            if (members.Length >= 1 && members[0] is MethodInfo)
            {
                value = new InstanceMethod(targetType, propertyName, obj);
                type = typeof(InstanceMethod);

                return true;
            }

            MemberInfo member = members[0];

            if (members.Length > 1) // CoolStorage, ActiveRecord and Dynamic Proxy frameworks sometimes return > 1 member
            {
                foreach (MemberInfo mi in members)
                    if (mi.DeclaringType == obj.GetType())
                        member = mi;
            }

            if (member is FieldInfo)
            {
                value = ((FieldInfo)member).GetValue(obj);
                type = ((FieldInfo)member).FieldType;

                return true;
            }

            if (member is PropertyInfo)
            {
                value = ((PropertyInfo)member).GetValue(obj, null);
                type = ((PropertyInfo)member).PropertyType;

                return true;
            }

            return false;
        }
예제 #39
0
 public void InvokeParameterlessMethodReturnsCorrectResult(object owner)
 {
     // Fixture setup
     var method = owner.GetType().GetMethod("GetHashCode");
     var sut = new InstanceMethod(method, owner);
     // Exercise system
     var result = sut.Invoke(Enumerable.Empty<object>());
     // Verify outcome
     var expected = owner.GetHashCode();
     Assert.Equal(expected, result);
     // Teardown
 }
예제 #40
0
 public void SutDoesNotEqualSomeOtherObject()
 {
     // Fixture setup
     var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var dummyOwner = new object();
     var sut = new InstanceMethod(dummyMethod, dummyOwner);
     // Exercise system
     var result = sut.Equals(new object());
     // Verify outcome
     Assert.False(result);
     // Teardown
 }
예제 #41
0
 public void InvokeMethodWithParametersReturnsCorrectResult(int x, int y)
 {
     // Fixture setup
     var owner = Comparer<int>.Default;
     var method = owner.GetType().GetMethod("Compare");
     var sut = new InstanceMethod(method, owner);
     // Exercise system
     var result = sut.Invoke(new object[] { x, y });
     // Verify outcome
     var expected = owner.Compare(x, y);
     Assert.Equal(expected, result);
     // Teardown
 }
예제 #42
0
 public void SutDoesNotEqualOtherSutWithDifferentMethod()
 {
     // Fixture setup
     var method1 = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
     var dummyOwner = new object();
     var sut = new InstanceMethod(method1, dummyOwner);
     
     var method2 = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).Skip(1).First();
     object other = new InstanceMethod(method2, dummyOwner);
     // Exercise system
     var result = sut.Equals(other);
     // Verify outcome
     Assert.False(result);
     // Teardown
 }
예제 #43
0
        public void SutDoesNotEqualOtherSutWithDifferentOwner()
        {
            // Fixture setup
            var dummyMethod = typeof(object).GetMethods(BindingFlags.Public | BindingFlags.Instance).First();
            var owner1 = new object();
            var sut = new InstanceMethod(dummyMethod, owner1);

            var owner2 = new object();
            var other = new InstanceMethod(dummyMethod, owner2);
            // Exercise system
            var result = sut.Equals(other);
            // Verify outcome
            Assert.False(result);
            // Teardown
        }
	public static int test() {
		var obj = new InstanceMethod();
		return obj.instanceMethod();
	}
        /// <summary>
        /// Verifies that a method has appripriate Guard Clauses in place.
        /// </summary>
        /// <param name="methodInfo">The method.</param>
        /// <remarks>
        /// <para>
        /// Exactly which Guard Clauses are verified is defined by
        /// <see cref="BehaviorExpectation" />.
        /// </para>
        /// </remarks>
        public override void Verify(MethodInfo methodInfo)
        {
            if (methodInfo == null)
                throw new ArgumentNullException("methodInfo");

            if (methodInfo.IsEqualsMethod())
                return;

            var owner = this.Builder.CreateAnonymous(methodInfo.ReflectedType);
            var method = new InstanceMethod(methodInfo, owner);
            this.Verify(method);
        }