Ejemplo n.º 1
0
        public static void RegisterRule <TType>(this AutoFaker <TType> faker, FakerRule <TType> fakerRule) where TType : class
        {
            //dynamically cast object to correct type
            var genericRuleType  = typeof(FakerRule <,>);
            var specificRuleType = genericRuleType.MakeGenericType(typeof(TType), fakerRule.PropertyType);
            var castMethod       = typeof(TemplateExtensions).GetMethod("Cast") !.MakeGenericMethod(new Type[] { specificRuleType });
            var castedObject     = castMethod.Invoke(null, new object[] { fakerRule });

            //dynamically call the RuleFor method on faker object
            var ruleForMethod = ReflectionHelper.GetMethod(faker.GetType(), "RuleFor", new Type[] { fakerRule.PropertyType },
                                                           new Type[] { ReflectionHelper.GetPropType(castedObject !, "Property"), ReflectionHelper.GetPropType(castedObject !, "Setter") });
Ejemplo n.º 2
0
        /// <summary>
        /// Tells the generator not to generate a value, but to use the default value for the type
        /// </summary>
        /// <typeparam name="TProperty"></typeparam>
        /// <typeparam name="TType"></typeparam>
        /// <param name="property"></param>
        /// <returns></returns>
        public static AutoFaker <TType> Ignore <TType, TProperty>(this AutoFaker <TType> src,
                                                                  Expression <Func <TType, TProperty> > property) where TType : class
        {
            //if we ignore we will get the default value for the type
            var defaultObj = Activator.CreateInstance <TType>();

            var prop = typeof(TType).GetProperty(ReflectionHelper.GetMemberName(property.Body), BindingFlags.Public | BindingFlags.Instance);

            var valueOfProperty = (TProperty)prop !.GetValue(defaultObj) !;

            var setter = new Func <Faker, TProperty>(f => valueOfProperty);

            var rule = new FakerRule <TType, TProperty>
            {
                Property = property,
                Setter   = setter
            };

            src.RegisterRule(rule);

            return(src);
        }