c# – 如何配置AutoFixture以在创建某种类型时使用枚举值作为种
发布时间:2020-12-15 06:56:31 所属栏目:百科 来源:网络整理
导读:我有以下类型: 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;}} 现在,当执行
我有以下类型:
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 – 应填充匿名数据. 题: 我尝试了以下这个: >注册用户对象的新闻集合: fixture.Register( () => Enum.GetValues(typeof(Status)).Cast<Status>().Select(s => new User(s))); 这种方法的问题是AutoFixture不会填充其他属性,如Name 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... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |