gpt4 book ai didi

c# - 如何配置 AutoFixture 在创建许多特定类型时使用枚举值作为种子?

转载 作者:太空狗 更新时间:2023-10-29 20:58:54 26 4
gpt4 key购买 nike

我有以下类型:

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 返回两个 Users , 每个状态一个。所有其他属性 - 如 Name - 应填充匿名数据。

问题:
如何配置 AutoFixture 来执行此操作?


我尝试了以下这个:

  1. 注册新闻集User对象:

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

    这种方法的问题是 AutoFixture 不会填充其他属性,例如 Name

  2. 自定义 User使用工厂并注册使用 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 在创建许多特定类型时使用枚举值作为种子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17111765/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com