シード値is correctを使用するようにFixture
をカスタマイズする方法。
表示される動作は、FromSeed
カスタマイズがAutoFixtureパイプラインを変更する方法の結果です。詳細を読むことに興味があるなら、私はそれらをhereと記述しました。回避策として
、あなたがこのようなシードの要求のためのカスタム標本ビルダーを使用することができます。
public class RelaxedSeededFactory<T> : ISpecimenBuilder
{
private readonly Func<T, T> create;
public RelaxedSeededFactory(Func<T, T> factory)
{
this.create = factory;
}
public object Create(object request, ISpecimenContext context)
{
if (request != null && request.Equals(typeof(T)))
{
return this.create(default(T));
}
var seededRequest = request as SeededRequest;
if (seededRequest == null)
{
return new NoSpecimen(request);
}
if (!seededRequest.Request.Equals(typeof(T)))
{
return new NoSpecimen(request);
}
if ((seededRequest.Seed != null)
&& !(seededRequest.Seed is T))
{
return new NoSpecimen(request);
}
var seed = (T)seededRequest.Seed;
return this.create(seed);
}
}
あなたは、このようなタイプFoo
のオブジェクトを作成するためにそれを使用することができます:
fixture.Customize<Foo>(c => c.FromFactory(
new RelaxedSeededFactory<Foo>(TestFooFactory)));
をこのカスタマイズはFoo
のプロパティを設定するときnull
- TestFooFactory
ファクトリ関数のシードとしてdefault(Foo)
を渡します。
GitHubにクロスポストされています:https://github.com/AutoFixture/AutoFixture/issues/467 –