伪造模拟数据 2 个不同属性的相同值
Bogus Mocking Data Same Values For 2 different properties
虚假模拟数据相同的值对于 2 个不同的属性,是否有可能在 fluent api.
中让 2 个属性具有相同的值
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
,但每个实体都有自己的。
以下按预期工作
[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;}
}
虚假模拟数据相同的值对于 2 个不同的属性,是否有可能在 fluent api.
中让 2 个属性具有相同的值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
,但每个实体都有自己的。
以下按预期工作
[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;}
}