4

いくつかのマッピング メソッドの単体テストを行っていますが、文字列型のソース プロパティが整数型の宛先プロパティにマップされています。

したがって、AutoFixture に、すべての文字列プロパティではなく、特定の文字列プロパティの匿名整数を使用してソース オブジェクトを作成してもらいたいと考えています。

これは可能ですか?

4

1 に答える 1

8

これを解決する最善の方法は、その名前に基づいて、匿名の数値の文字列表現を特定のプロパティに割り当てる、規則に基づくカスタム値ジェネレータを作成することです。

したがって、例を挙げると、次のようなクラスがあると仮定します。

public class Foo
{
    public string StringThatReallyIsANumber { get; set; }
}

カスタム値ジェネレーターは次のようになります。

public class StringThatReallyIsANumberGenerator : ISpecimenBuilder
{
    public object Create(object request, ISpecimenContext context)
    {
        var targetProperty = request as PropertyInfo;

        if (targetProperty == null)
        {
            return new NoSpecimen(request);
        }

        if (targetProperty.Name != "StringThatReallyIsANumber")
        {
            return new NoSpecimen(request);
        }

        var value = context.CreateAnonymous<int>();

        return value.ToString();
    }
}

ここでの重要な点は、カスタム ジェネレーターは という名前のプロパティのみを対象とするということです。StringThatReallyIsANumberこの場合、これが規則です。

テストで使用するには、コレクションFixtureを介してインスタンスに追加するだけです。Fixture.Customizations

var fixture = new Fixture();
fixture.Customizations.Add(new StringThatReallyIsANumberGenerator());

var anonymousFoo = fixture.CreateAnonymous<Foo>();
于 2012-02-09T10:28:58.357 に答える