AutoFixture中对延迟实例化的Lazy支持
创始人
2024-11-12 14:00:19
0

AutoFixture是一个.NET测试库,用于自动生成复杂对象的测试数据。有时候需要对Lazy类型进行测试,但是默认情况下AutoFixture不支持Lazy类型的延迟实例化机制。因此,需要进行如下的修改,来支持Lazy类型的延迟实例化。

首先,需要定义一个LazySpecimenBuilder类,继承自ISpecimenBuilder接口,用于自定义实例构建器。该类的实现如下所示:

public class LazySpecimenBuilder : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var t = request as Type;
        if (t == null || !t.IsGenericType || t.GetGenericTypeDefinition() != typeof(Lazy<>))
            return new NoSpecimen();

        var targetType = t.GetGenericArguments()[0];
        var instance = context.Resolve(targetType);
        var lazyType = typeof(Lazy<>).MakeGenericType(targetType);
        return Activator.CreateInstance(lazyType, instance);
    }
}

然后,需要将LazySpecimenBuilder注册到AutoFixture中。具体的方式是通过Fixture.Customizations.Add方法,如下所示:

var fixture = new Fixture();
fixture.Customizations.Add(new LazySpecimenBuilder());

这样,就可以通过AutoFixture进行Lazy类型的测试。例如:

var lazyString = fixture.Create>();
Console.WriteLine(lazyString.Value); // 输出生成的随机字符串

因为AutoFixture默认就支持对字符串类型的随机生成,所以这里可以直接通过Lazy类型来进行测试。

参考链接:https://github.com/AutoFixture/AutoFixture/issues/336

相关内容

热门资讯

了解透视!德州局怎么透视,微信... 了解透视!德州局怎么透视,微信小程序微乐挂如何获取,机巧教程(有挂攻略)-哔哩哔哩小薇(辅助器软件下...
解密透视!wepoker免费脚... 解密透视!wepoker免费脚本咨询,手机微乐小程序破解器,经验教程(有挂教学)-哔哩哔哩1、实时w...
推荐透视!wepoker透视脚... 推荐透视!wepoker透视脚本网页,微信小程序微乐辅助器真吗,法子教程(有挂详情)-哔哩哔哩推荐透...
开挂透视!wejoker辅助机... 开挂透视!wejoker辅助机器人,微乐小程序有脚本吗,方针教程(有挂方法)-哔哩哔哩1、下载好we...
详情透视!约局吧德州真的有透视... 详情透视!约局吧德州真的有透视挂吗,微乐河南麻将辅助ios,机巧教程(真的有挂)-哔哩哔哩1、约局吧...
教你透视!拱趴大菠萝有挂吗,微... 教你透视!拱趴大菠萝有挂吗,微信小程序有挂吗辅助,绝活儿教程(揭秘有挂)-哔哩哔哩拱趴大菠萝有挂吗透...
普及透视!xpoker辅助怎么... 普及透视!xpoker辅助怎么用,微乐小程序免费脚本,办法教程(有挂攻略)-哔哩哔哩1、打开软件启动...
专业透视!epoker有透视吗... 专业透视!epoker有透视吗,小程序微乐陕西挖坑辅助,窍门教程(新版有挂)-哔哩哔哩一、epoke...
关于透视!拱趴大菠萝挂怎么安装... 关于透视!拱趴大菠萝挂怎么安装,微信小程序微乐辅助器破解版,演示教程(讲解有挂)-哔哩哔哩1、玩家可...
教你透视!破解辅助插件wepo... 教你透视!破解辅助插件wepoker,微乐微信小程序辅助软件,举措教程(确实有挂)-哔哩哔哩所有人都...