c# – 如何配置AutoFixture以在创建某种类型时使用枚举值作为种子?

c# – 如何配置AutoFixture以在创建某种类型时使用枚举值作为种子?,第1张

概述我有以下类型: public enum Status{ Online, Offline}public class User{ private readonly Status _status; public User(Status status) { _status = status; } public Status Status {get {ret 我有以下类型:
public enum Status{    Online,Offline}public class User{    private Readonly Status _status;    public User(Status status) { _status = status; }    public Status Status {get {return _status; }}    public string name {get;set;}}

现在,当执行fixture.CreateMany< User>时我希望autoFixture返回两个用户,每个状态一个.所有其他属性 – 如name – 应填充匿名数据.

题:
如何配置autoFixture来执行此 *** 作?

我尝试了以下这个:

>注册用户对象的新闻集合:

fixture.Register(    () => Enum.GetValues(typeof(Status)).Cast<Status>().Select(s =>         new User(s)));

这种方法的问题是autoFixture不会填充其他属性,如name
>自定义用户使用工厂并注册使用fixture.Create的集合:

f.Customize<User>(c => c.FromFactory((Status s) => new User(s)));    f.Register(() =>        Enum.GetValues(typeof(Status))            .Cast<Status>()            .Select(s => (User)f.Create(new SeededRequest(typeof(User),s),new SpecimenContext(f))));

那也行不通.种子没有被使用.

解决方法 你可以这样做:
var users = new Fixture().Create<Generator<User>>();var onlineUser = users.Where(u => u.Status == Status.Online).First();var offlineUser = users.Where(u => u.Status == Status.Offline).First();

如果您使用的是autoFixture.Xunit,则声明性等效项为:

[Theory,autoData]public voID CreateOneOfEachDeclaratively(Generator<User> users){    var onlineUser = users.Where(u => u.Status == Status.Online).First();    var offlineUser = users.Where(u => u.Status == Status.Offline).First();    // Use onlineUser and offlineUser here...}
总结

以上是内存溢出为你收集整理的c# – 如何配置AutoFixture以在创建某种类型时使用枚举值作为种子?全部内容,希望文章能够帮你解决c# – 如何配置AutoFixture以在创建某种类型时使用枚举值作为种子?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1260321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存