mam następujące typy:Jak skonfigurować AutoFixture do używania wartości wyliczeniowej jako materiału siewnego podczas tworzenia wielu określonego typu?
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;}
}
Teraz, podczas wykonywania fixture.CreateMany<User>
chcę AutoFixture aby powrócić dwa Users
, po jednej statusu. Wszystkie inne właściwości - takie jak Name
- powinny być wypełnione anonimowymi danymi.
Pytanie:
Jak skonfigurować AutoFixture, aby to zrobić?
Próbowałem następującą to:
Rejestracja kolekcję, aktualności się przedmiotem
User
:fixture.Register( () => Enum.GetValues(typeof(Status)).Cast<Status>().Select(s => new User(s)));
Problem z tego podejścia jest to, że AutoFixture nie wypełnia drugi właściwości takie jak
Name
Dostosuj
User
używać fabrykę i zarejestrować zbiór, który używafixture.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))));
To nie działało. Nasienie nie jest używane.
Dzięki za odpowiedź. Niestety, to nie działa, jeśli właściwość 'Status' nie jest" tylko do odczytu ". 'First'" never "return (Czekałem co najmniej 30 sekund). –
Słowo kluczowe "readonly" nie ma z tym nic wspólnego. Właśnie usunąłem słowo kluczowe "readonly" z mojej repro i nie zmieniło wyniku. –
Nie mówię o tym, że pole zaplecza nie jest tylko do odczytu. Mówię o tym, że właściwość * nie jest tylko do odczytu, tj. 'Public Status Status {get; zestaw; } '. –