Bogus Mocking Data Same Values For 2 different properties is it possible to have 2 properties have same value in the fluent 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
Wanted generated data:
[
{
userName: "Ivan Horvat",
normalizedUserName: "IVAN HORVAT"
},
{
userName: "John Doe",
normalizedUserName: "JOHN DOE"
}
]
I want each of the entities generated to have same UserName
and NormalizedUsername
but each entity its own.
You can also have two properties with the same value by using the RuleFor(Prop, (f, usr) =>)
overload too.
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;}
}
The following works as expected
[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; }
}
}
All the created instance have the desired values as indicated in the comments. Note the use of ToUpper()
for the NormalizedUserName
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With