AutoFixture无法为使用System.ComponentModel.DataAnnotations.RangeAttribute的decimal属性创建对象。
创始人
2024-11-12 14:00:17
0次

AutoFixture无法为使用System.ComponentModel.DataAnnotations.RangeAttribute的decimal属性创建对象的问题可以通过自定义AttributeRelay来解决。下面是一个代码示例:

using System;
using System.ComponentModel.DataAnnotations;
using System.Reflection;
using AutoFixture;
using AutoFixture.Kernel;

public class RangeAttributeRelay : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var property = request as PropertyInfo;
        if (property == null)
        {
            return new NoSpecimen();
        }

        var rangeAttribute = property.GetCustomAttribute();
        if (rangeAttribute != null && property.PropertyType == typeof(decimal))
        {
            return context.Resolve(rangeAttribute.Minimum);
        }

        return new NoSpecimen();
    }
}

public class MyClass
{
    [Range(1.0, 10.0)]
    public decimal MyProperty { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var fixture = new Fixture();
        fixture.Customizations.Add(new RangeAttributeRelay());

        var myClass = fixture.Create();

        Console.WriteLine(myClass.MyProperty);
    }
}

上面的代码示例中,我们自定义了一个RangeAttributeRelay类,实现了ISpecimenBuilder接口。在Create方法中,我们通过反射获取属性上的RangeAttribute,并判断属性类型是否为decimal。如果满足条件,我们使用AutoFixture的Resolve方法来生成满足RangeAttribute要求的decimal对象。

在Main方法中,我们首先创建了一个Fixture对象,并添加了自定义的RangeAttributeRelay。然后使用fixture.Create方法来创建MyClass对象,此时AutoFixture就能够正确生成满足RangeAttribute要求的decimal属性对象。

运行上述代码,输出将会是一个满足范围要求的decimal属性值。

相关内容

热门资讯

揭秘一下透视挂!湘中竞技透视挂... 揭秘一下透视挂!湘中竞技透视挂AI方法,湘中竞技多功能切实有透视挂方法1、湘中竞技透视辅助软件激活码...
免费测试版辅助!联众娱乐辅助A... 免费测试版辅助!联众娱乐辅助AI技巧,联众娱乐多功能切实存在有辅助技巧1、联众娱乐模拟器是什么优化,...
分享认知透视挂!富友茶苑透视挂... 分享认知透视挂!富友茶苑透视挂AI脚本,富友茶苑多功能一直存在有透视挂脚本1)富友茶苑有没有挂:进一...
推荐一款透视挂!麻将争霸花牌透... 推荐一款透视挂!麻将争霸花牌透视挂AI教程,麻将争霸花牌多功能原来真的是有透视挂教程1、进入游戏-大...
一分钟教会你透视挂!战火互娱透... 一分钟教会你透视挂!战火互娱透视挂AIapp,战火互娱多功能一贯是有透视挂app1、在战火互娱插件功...
推荐攻略辅助器!杜鹃花辅助器A... 推荐攻略辅助器!杜鹃花辅助器AI攻略,杜鹃花多功能真是存在有辅助器攻略杜鹃花是不是有人用挂微扑克wp...
总算了解透视器!联众跑胡子透视... 总算了解透视器!联众跑胡子透视器AI教程,联众跑胡子多功能一直有透视器教程1、任何联众跑胡子透视是真...
热点讨论透视器!英豪娱乐城透视... 热点讨论透视器!英豪娱乐城透视器AI工具,英豪娱乐城多功能一直有透视器工具1、下载好英豪娱乐城正确养...
实操分享开挂!冰球突破开挂AI... 实操分享开挂!冰球突破开挂AI插件,冰球突破多功能好像真的是有开挂插件1.冰球突破 选牌创建新账号,...
大家学习交流辅助器!皮皮至尊棋... 大家学习交流辅助器!皮皮至尊棋牌辅助器AI软件,皮皮至尊棋牌多功能本来是真的有辅助器软件1、任何皮皮...