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

相关内容

热门资讯

透视推荐!红龙poker辅助平... 透视推荐!红龙poker辅助平台(透视)hhpoker到底可以透视码,教程步骤(有挂秘笈)-哔哩哔哩...
透视专业!红龙poker辅助(... 透视专业!红龙poker辅助(透视)wepoker开脚本视频,教程指引(有挂详细)-哔哩哔哩一、we...
透视详情!pokemmo脚本(... 透视详情!pokemmo脚本(透视)wepoker私人局规律,教程学习(有挂实锤)-哔哩哔哩wepo...
透视揭幕!cloudpoker... 透视揭幕!cloudpoker透视(透视)xpoker辅助器,教程绝活儿(真实有挂)-哔哩哔哩;1、...
透视科普!hh poker辅助... 透视科普!hh poker辅助器先试用(透视)wpk有透视吗,教程总结(有挂总结)-哔哩哔哩1、超多...
透视揭幕!wepoker透视a... 透视揭幕!wepoker透视app下载(透视)德州透视脚本,教程策略(有挂详细)-哔哩哔哩1、点击下...
透视解密!wpk俱乐部辅助器(... 透视解密!wpk俱乐部辅助器(透视)wepoker有透视底牌吗,教程法子(有挂分享)-哔哩哔哩1、全...
透视解谜!wepoker免费脚... 透视解谜!wepoker免费脚本咨询(透视)wpk免费辅助,教程窍要(有挂详细)-哔哩哔哩1、打开软...
透视开挂!hhpoker到底可... 透视开挂!hhpoker到底可以透视吗(透视)智星菠萝透视,教程项目(揭秘有挂)-哔哩哔哩1、完成h...
透视解密!wejoker辅助软... 透视解密!wejoker辅助软件视频(透视)pokernow辅助控制,教程诀窍(有挂讲解)-哔哩哔哩...