自动混合定制:提供构造函数参数

我有以下课程:

class Foo { public Foo(string str, int i, bool b, DateTime d, string str2) { ..... } } 

我正在使用AutoFixture创建一个Foo

 var foo = fixture.Create(); 

但我希望AutoFixture为str2参数提供已知值,并对每个其他参数使用默认行为。

我尝试实现一个SpecimenBuilder但我找不到一种方法来获取与请求相关联的元数据,以便知道我是从Foo构造函数调用的。

有没有办法实现这个目标?

在这里回答你可以有类似的东西

 public class FooArg : ISpecimenBuilder { private readonly string value; public FooArg(string value) { this.value = value; } public object Create(object request, ISpecimenContext context) { var pi = request as ParameterInfo; if (pi == null) return new NoSpecimen(request); if (pi.Member.DeclaringType != typeof(Foo) || pi.ParameterType != typeof(string) || pi.Name != "str2") return new NoSpecimen(request); return value; } } 

然后你可以像这样注册它

 var fixture = new Fixture(); fixture.Customizations.Add(new FooArg(knownValue)); var sut = fixture.Create();