【发布时间】:2015-02-05 17:13:40
【问题描述】:
在 Autofixture 中是否有一些简单的方法可以使用它的构造函数来新建对象,但硬编码/指定要用于构造函数中单个参数的值?
我看到这可以通过属性来完成,使用类似的东西:
fixture.Build<MyObj>().With(x=x.Val,"hard coded value").Create()
【问题讨论】:
-
C# 并没有真正的类型安全语法来仅引用方法中的单个参数(包括构造函数),因此除非您将整个构造函数拉入,否则这实际上并不可行一个 lambda 表达式,此时您不妨直接使用构造函数创建对象,但不使用 AutoFixture。你想做这件事的动机是什么? IME,通常有一种以不同方式实现大多数相关目标的好方法,但您可能需要以不同的方式看待问题。
-
希望有一些非类型安全但方便的方式,比如 Func
,其中输入是字符串形式的参数名称。我的一般动机是单元测试。通常我想更新一个对象,但我只关心一个参数。也许参数值驱动某种计算或转换。我希望值本身是随机的,但测试需要知道选择了什么随机值。鉴于此,单元测试可能会获取一个属性或调用一个在其操作中使用构造函数参数值的方法。 -
就是这样! @MarkSeemann,有什么办法可以将这样的东西内置到 AutoFixture 中?这似乎是一个非常有用但基本的范例(选择构造函数值),不支持开箱即用。
-
@SFun28 我已经编辑了我的答案以添加另一个部分,解释如何使用提供的构建块做类似的事情;如果你想隐藏一些管道,我相信你可以弄清楚如何围绕它创建一个 API。
标签: c# autofixture