CodeGo.net>虚假,AutoFixture的,其他(?):如何用假数据填充嵌套模型,并为特定属性设置规则?
作者:互联网
我有一个非常嵌套的模型,我想用虚假数据创建成千上万个.但是,模型中的某些属性也必须在特定范围内或具有特定规则.我看了看这两个假数据生成器:
AutoFixture似乎只会为所有内容生成虚假数据.
伪造的商品可以为属性范围设置规则,但所有其他属性都为空-否则您必须为所有属性定义规则.
我是否错过了某些东西,或者是否无法用假数据填充模型并仅为特定属性设置规则?
解决方法:
AutoFixture使您可以基于逐个属性或按惯例为属性建立规则.
自定义特定属性
您可以使用Customize更改特定类型的行为,包括属性:
[Fact]
public void CustomizeSpecificProperty()
{
var fixture = new Fixture();
fixture.Customize<MyClass>(c => c.With(mo => mo.Number, 42));
var actual = fixture.Create<MyClass>();
Assert.Equal(42, actual.Number);
}
这种特定的自定义更改了所有MyClass.Number属性的规则;该值将始终为42.
按惯例定制
您还可以按惯例匹配各种属性,通常可以查看属性类型和名称的组合:
[Fact]
public void CustomizeTextPropertyByConvention()
{
var fixture = new Fixture();
fixture.Customizations.Add(new TextPropertyBuilder());
var actual = fixture.Create<MyClass>();
Assert.Equal("Foo", actual.Text);
}
此选项还要求您编写一个自定义TextPropertyBuilder类:
public class TextPropertyBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi == null || pi.Name != "Text" || pi.PropertyType != typeof(string))
return new NoSpecimen();
return "Foo";
}
}
该规则将适用于所有称为“文本”的字符串属性,无论它们在哪个类上定义.
AutoFixture带有丰富的API,使您可以更简洁地表达许多这样的规则,但这是主要的构建块.
以上两个示例都使用此MyClass:
public class MyClass
{
public int Number { get; set; }
public string Text { get; set; }
}
标签:autofixture,mocking,testing,c,bogus 来源: https://codeday.me/bug/20191110/2013696.html