问题描述
我有以下几种类型:
公共枚举状态
{
线上,
当前离线
}
公共类用户
{
私人只读状态_status;
公众用户(状态状态){_status =地位; }
公共状态状态{{返回_status; }}
公共字符串名称{获取;集;}
}
现在,当执行 fixture.CreateMany<使用者>
我要AutoFixture返回两个用户
,每STATUS 。所有其他属性 - 如名称
- 应该充满匿名数据
问:
如何配置AutoFixture做到这一点?
我尝试了以下内容:
-
注册收藏这个消息了
用户
目标:fixture.Register( ()=> 。Enum.GetValues(typeof运算(状态))演员LT;状态>()选择(S => 新用户()));
使用这种方法的问题是,AutoFixture不填写其他属性,如
名称
-
自定义
用户
来使用工厂和注册使用fixture.Create
A系列:f.Customize<使用者>(C => c.FromFactory((状态S)=>新用户())); f.Register(()=> Enum.GetValues(typeof运算(状态)) .Cast<状态>() 。选择(S =>(用户)f.Create(新SeededRequest(typeof运算(用户),S), 新SpecimenContext(F))));
这也不能工作。种子不被使用。
你可以这样做:
VAR用户=新灯()创建<发电机<使用者>>();
VAR onlineUser = users.Where(U => u.Status == Status.Online)。首先();
VAR offlineUser = users.Where(U => u.Status == Status.Offline)。首先();
如果您使用的是AutoFixture.Xunit,声明当量为:
[理论,数据研究机构Autodata]
公共无效CreateOneOfEachDeclaratively(发电机<使用者>用户)
{
VAR onlineUser = users.Where(U => u.Status == Status.Online)。首先();
VAR offlineUser = users.Where(U => u.Status == Status.Offline)。首先();
//使用onlineUser和offlineUser这里...
}
I have the following types:
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;}
}
Now, when executing fixture.CreateMany<User>
I want AutoFixture to return two Users
, one per status. All other properties - like Name
- should be filled with anonymous data.
Question:
How to configure AutoFixture to do this?
I tried the following this:
Register collection that news up the
User
object:fixture.Register( () => Enum.GetValues(typeof(Status)).Cast<Status>().Select(s => new User(s)));
The problem with this approach is that AutoFixture doesn't fill the other properties like
Name
Customize
User
to use a factory and register a collection that usesfixture.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))));
That didn't work either. The seed isn't being used.
You could do this:
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();
If you're using AutoFixture.Xunit, the declarative equivalent is:
[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...
}
这篇关于如何配置AutoFixture创建多个特定类型的时候使用一个枚举值作为种子?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!