public override void Verify(MethodInfo methodInfo)
        {
            if (methodInfo == null)
            {
                throw new ArgumentNullException("methodInfo");
            }

            if (methodInfo.ReflectedType == null && !methodInfo.IsObjectEqualsOverrideMethod())
            {
                return;
            }

            var firstInstance  = builder.CreateInstanceOfType(methodInfo.ReflectedType);
            var secondInstance = builder.CreateInstanceOfType(methodInfo.ReflectedType);

            var firstComparisonResult  = firstInstance.Equals(secondInstance);
            var secondComparisonResult = secondInstance.Equals(firstInstance);

            if (firstComparisonResult != secondComparisonResult)
            {
                throw new EqualsSymmetricException(
                          string.Format(
                              "Equals implementation of type {0} is not symmetric. x.Equals(y) returns {1} but y.Equals(x) return {2}",
                              methodInfo.ReflectedType, firstComparisonResult, secondComparisonResult));
            }
        }
        public object CreateNewInstance()
        {
            var parameters = (from pi in constructorInfo.GetParameters()
                              select specimenBuilder.CreateInstanceOfType(pi.ParameterType)).ToList();

            var instance = constructorInfo.Invoke(parameters.ToArray());

            collector.AddSpecimens(instance, parameters.ToArray());

            return(instance);
        }