Поддельные насмешливые данные одинаковые значения для двух разных свойств
Поддельные насмешливые данные с одинаковыми значениями. Для двух разных свойств возможно, чтобы 2 свойства имели одинаковое значение в свободном API.
var users = new Faker<User>()
.StrictMode(false)
.RuleFor(o => o.Id, f => orderIds++)
.RuleFor(o => o.UserName, f => f.Person.FullName) // This needs to be same as the next property
.RuleFor(o => o.NormalizedUserName, f => f.Person.FullName) // This should be same but uppercase
Требуются сгенерированные данные:
[
{
userName: "Ivan Horvat",
normalizedUserName: "IVAN HORVAT"
},
{
userName: "John Doe",
normalizedUserName: "JOHN DOE"
}
]
Я хочу, чтобы каждая из созданных сущностей имела одинаковые UserName
а также NormalizedUsername
но каждая сущность своя.
3 ответа
Следующее работает как ожидалось
[TestClass]
public class MyTestClass1 {
[TestMethod]
public void MyTestMethod() {
//Arrange
int orderIds = 0;
var faker = new Faker<User>()
.StrictMode(false)
.RuleFor(o => o.Id, f => ++orderIds)
.RuleFor(o => o.UserName, f => f.Person.FullName) // This needs to be same as the next property
.RuleFor(o => o.NormalizedUserName, f => f.Person.FullName.ToUpper()) // This should be same but uppercase
.RuleFor(o => o.Email, f => $"{f.Person.FirstName}.{f.Person.LastName}@company.com");
//Act
var user = faker.Generate();
//Assert
user.UserName.ToUpper().Should().Be(user.NormalizedUserName);
}
public class User {
public int Id { get; internal set; }
public string UserName { get; internal set; }
public string NormalizedUserName { get; internal set; }
public string Email { get; internal set; }
}
}
Все созданные экземпляры имеют желаемые значения, как указано в комментариях. Обратите внимание на использованиеToUpper()
для NormalizedUserName
Вы также можете иметь два свойства с одинаковым значением, используя RuleFor(Prop, (f, usr) =>)
перегрузка тоже.
void Main()
{
int orderIds = 0;
var users = new Faker<User>()
.StrictMode(false)
.RuleFor(o => o.Id, f => orderIds++)
.RuleFor(o => o.UserName, f => f.Person.FullName) // This needs to be same as the next property
.RuleFor(o => o.NormalizedUserName, (f, usr) => usr.UserName.ToUpper()); // This should be same but uppercase
users.Generate(3).Dump();
}
public class User{
public int Id{get;set;}
public string UserName{get;set;}
public string NormalizedUserName {get;set;}
}
https:https://stackru.com/images/285688ddb8086619af107a1f37ca8b9c10993518.png
Еще один шаблон, который может быть полезен. Здесь мы готовим список исходных данных (data
) - либо загрузить из БД, либо подготовить вручную. Bogus выбирает случайный элемент из исходных данных (randomRecord
) и использует его для заполнения различных полей целиYourEntity
Элемент списка.
var data = new List<SomeClass>; // Load from DB a list of data as source
var faker = new Faker<YourEntity>();
faker.StrictMode(false);
faker.Rules((setter, entity) =>
{
var randomRecord = setter.PickRandom(data); // Here we pick random data from our source collection
entity.Field1 = randomRecord.SomeField1;
entity.Field2 = randomRecord.SomeField2;
entity.Field3 = $"{entity.Field1} {entity.Field2}";
});