我可以为Bogus指定随机种子吗?

3

我正在使用Bogus来生成测试数据。

有没有一种方法可以设置它使用的种子,以便它按相同的顺序生成相同的测试数据?

例如,这个测试将失败:

var person1 = new Bogus.Person();
var person2 = new Bogus.Person();
Assert.AreEqual(person1.FullName, person2.FullName);

然而,有没有一种方法可以重置种子,使它不会,即:
Bogus.Config.SetSeed(1);
var person1 = new Bogus.Person();

Bogus.Config.SetSeed(1);
var person2 = new Bogus.Person();

Assert.AreEqual(person1.FullName, person2.FullName);
2个回答

5

这个自述文件中有一个例子:

//Set the randomzier seed if you wish to generate repeatable data sets.
Randomizer.Seed = new Random(8675309);

然而,设置种子意味着随机生成器的结果是一致的。如果想要达到你想要的效果,需要在每次调用之前重置种子以获得相同的结果。


谢谢。我知道我在某个地方看到过它。每次测试运行只需要执行一次,但我编写了示例以表明我想要控制它,只是为了确保我不会得到需要重新启动应用程序域的答案。 - b_levitt

3

另一个答案会改变全局种子,这并不好:

  • 有可能无法并行运行测试
  • 测试代码之间可能存在依赖关系

推荐的方法是更改Faker本身的种子:

对于非通用Faker:

var seed = 8675309;
var faker = new Faker()
faker.Random = new Randomizer(seed );

通用的 Faker 有一个辅助函数 UseSeed:
var seed = 8675309;
var faker = new Faker<MyClass>().UseSeed(seed);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接