私は次のクラスを持っています:
class Foo
{
public Foo(string str, int i, bool b, DateTime d, string str2)
{
.....
}
}
AutoFixtureを使用してFoo
を作成しています。
var foo = fixture.Create<Foo>();
しかし、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<Foo>();