C# 在运行时以伪造的方式为某些字段提供数据

C# 在运行时以伪造的方式为某些字段提供数据,c#,bogus,C#,Bogus,我目前正在使用伪数据创建一组伪数据规则。这些将被一组模拟服务使用。我的意思是,我正在创建一个模拟的搜索服务,它提供伪造的数据 对于大多数服务,输入的搜索条件应影响输出的数据(例如,如果您使用服务搜索墨西哥境内的组织,伪造的数据应仅包括墨西哥境内的地址)。如果您搜索名称以“Micro*”开头的组织,我希望能够使用此输入来影响数据的生成方式 到目前为止,我已经能够通过对Faker进行子分类并提供我自己的Generate方法来实现这一点,该方法需要一些输入数据。然后我可以调用Faker.Generat

我目前正在使用伪数据创建一组伪数据规则。这些将被一组模拟服务使用。我的意思是,我正在创建一个模拟的搜索服务,它提供伪造的数据

对于大多数服务,输入的搜索条件应影响输出的数据(例如,如果您使用服务搜索墨西哥境内的组织,伪造的数据应仅包括墨西哥境内的地址)。如果您搜索名称以“Micro*”开头的组织,我希望能够使用此输入来影响数据的生成方式

到目前为止,我已经能够通过对
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
的原始实例

临别忠告。。。 总之,使用上述任何方法,您的首要任务应该是保持代码干净、清晰和可读。争取最简单、最可维护的解决方案


希望有帮助

我不熟悉假货;需要吗?如果不是,这将非常容易处理。伪造的目的是生成实际数据,例如姓名、地址、电话号码等。它通常是随机生成的。我希望在某些情况下,这是非随机的。太好了,谢谢!我最终实现了类似的东西,但将根据您的建议进行重构。