c# - 带种子的 CreateMany 有什么作用?

标签 c# unit-testing autofixture

带有 T seed 参数的 CreateMany 重载实际上做了什么?我试过播种,但种子似乎对创建的对象没有影响。例如,我希望如果我的种子具有 string 类型的属性,则:

  • 字符串值将用于在所有新创建的对象中填充该属性

  • 或者在所有新创建的对象中设置该属性时,字符串值将用作前缀

最佳答案

tl;博士

一般来说,AutoFixture does not guarantee如果有的话,在创建过程中将如何使用种子值。这个特性源于AutoFixture的方式is designed .

背景

每次 AutoFixture 被要求创建某个类型 的对象时,请求都会通过 a pipeline of objects called "builders" 进行路由。 .每个构建器负责处理某种请求(无论是对具体类型接口(interface)属性字段 等)。如果构建器遇到它可以处理的请求,它将为其返回一个值,并且管道会在下一个请求时重新启动。

鉴于上述情况,如果您想基于种子 创建对象,AutoFixture 所能做的就是确保您提供的种子值为embedded in the request。通过管道发送。然后由构建者决定如何处理该值。

解决方案

AutoFixture 目前带有一个单一构建器,它考虑了种子值,即 the one for strings .

但是,您可以通过使用 the FromSeed method 专门为该类型自定义 Fixture 来告诉 AutoFixture 在创建任何类型 的对象时应该如何使用种子值。 :

var fixture = new Fixture();
fixture.Customize<Foo>(c =>
    c.FromSeed(seed =>
        {
            // return an instance of Foo
            // that uses the seed value in some way
        }));

您提供给 FromSeed工厂函数将在每次 AutoFixture 必须创建 Foo 的实例时被调用,并且它将被传递给来自 Fixture 的种子值。例如,鉴于此:

fixture.CreateMany<Foo>(seed: new Foo { Bar = "baz" });

工厂函数的 seed 参数将接收 Foo 种子对象,该对象的 Bar 属性设置为 "baz"

关于c# - 带种子的 CreateMany 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462933/

相关文章:

c# - FakeItEasy如何设置多个泛型函数的返回值?

c# - 如何将 AutoFixture 与 NSubstitute 结合使用的示例

Autofixture - 测试中的逻辑重复

c# - ITextSharp 一起使用多种字体样式。即粗体、下划线、斜体...等

c# - .NET字典插入的怪异性能行为

c# - 是否可以在不等待整个表单到达的情况下访问通过 multipart/form-data 发送的参数

java - 无法使用 Fest + Swing 创建 FrameFixture

c# - 是否有 Visual Studio for .NET 开发的有力竞争者?

java - Scala 如何将模拟对象注入(inject) ScalatraFlatSpec

javascript - Controller 的 Mocha 单元测试解决了来自服务的 promise