C# 在运行时以伪造的方式为某些字段提供数据
我目前正在使用伪数据创建一组伪数据规则。这些将被一组模拟服务使用。我的意思是,我正在创建一个模拟的搜索服务,它提供伪造的数据 对于大多数服务,输入的搜索条件应影响输出的数据(例如,如果您使用服务搜索墨西哥境内的组织,伪造的数据应仅包括墨西哥境内的地址)。如果您搜索名称以“Micro*”开头的组织,我希望能够使用此输入来影响数据的生成方式 到目前为止,我已经能够通过对C# 在运行时以伪造的方式为某些字段提供数据,c#,bogus,C#,Bogus,我目前正在使用伪数据创建一组伪数据规则。这些将被一组模拟服务使用。我的意思是,我正在创建一个模拟的搜索服务,它提供伪造的数据 对于大多数服务,输入的搜索条件应影响输出的数据(例如,如果您使用服务搜索墨西哥境内的组织,伪造的数据应仅包括墨西哥境内的地址)。如果您搜索名称以“Micro*”开头的组织,我希望能够使用此输入来影响数据的生成方式 到目前为止,我已经能够通过对Faker进行子分类并提供我自己的Generate方法来实现这一点,该方法需要一些输入数据。然后我可以调用Faker.Generat
Faker
进行子分类并提供我自己的Generate
方法来实现这一点,该方法需要一些输入数据。然后我可以调用Faker.Generate()
方法,允许它提供一些数据,然后在传回之前更改某些字段
这种方法在一定程度上是有效的,但不是特别灵活,我觉得应该有更好的方法来做到这一点。我已在下面粘贴了此解决方案的示例
//这显示了我当前的解决方法
公共静态组织生成(字符串搜索代码)
{
var organization=Faker.Generate();
组织机构代码=搜索代码;
返回组织;
}
我认为有很多方法可以做到这一点,但这取决于您的场景。你应该做的第一件事是考虑你的对象图有多深或复杂。
所以,作为一个粗略的指南。。。
- 如果您的对象图是深而复杂的,请考虑用<代码> FAKER < /COD>外观来伪造对象。这意味着创建
静态
工厂方法,如:
void Main()
{
搜索(“Micro*”).Dump();
}
公共组织搜索(字符串搜索)
{
返回创建组织(代码:搜索);
}
静态组织CreateOrganization(字符串代码=null){
var faker=新的faker();
//在此处设置复杂的子依赖关系图。
//最后在下面创建父对象。
返回新组织{
代码=代码??faker.Company.CompanyName()
};
}
公营班级组织
{
公共字符串代码{get;set;}
}
- 如果您正在生成POCO/DTO类型的对象,而这些对象没有非常大或复杂的对象图,那么使用
也应该非常有效。例如:Faker
void Main()
{
搜索(“Micro*”).Dump();
}
公共组织搜索(字符串代码){
var customOrgFaker=Fakers.OrgFaker.RuleFor(x=>x.Code,f=>Code);
返回customOrgFaker.Generate();
}
静态类伪造者{
公共静态伪造器OrgFaker=>
新骗子()
.RuleFor(o=>o.Code,f=>f.Company.CompanyName());
}
注意,在上面的Faker
示例中,我调用了.RuleFor(\u=>\ ucode,…)
两次,但只有最后一次调用.RuleFor
才会适用。在本例中,.RuleFor(x=>x.code,f=>code)
是.Generate()
之前的最后一个调用。实际上,这就像覆盖默认的.RuleFor(o=>o.code,f=>f.CompanyName())
设置在Fakers的静态构造函数中
还要注意,每次访问.OrgFaker
属性时,都会创建一个新的伪造者。这很好,因为对.OrgFaker
的每个属性访问都会为您的消费和定制创建一个Faker
的专用实例
如果这对您不起作用,并且您只有一个要使用的Faker
实例,您可以使用Faker.Clone()
方法克隆Faker
,然后再次使用发散规则调用.RuleFor
,而不会弄乱Faker
的原始实例
临别忠告。。。
总之,使用上述任何方法,您的首要任务应该是保持代码干净、清晰和可读。争取最简单、最可维护的解决方案
希望有帮助 我不熟悉假货;需要吗?如果不是,这将非常容易处理。伪造的目的是生成实际数据,例如姓名、地址、电话号码等。它通常是随机生成的。我希望在某些情况下,这是非随机的。太好了,谢谢!我最终实现了类似的东西,但将根据您的建议进行重构。