Генерация анонимного номера для строкового свойства с автофиксом - PullRequest
4 голосов
/ 09 февраля 2012

Я тестирую несколько методов отображения, и у меня есть свойство источника типа string, которое сопоставлено свойству назначения типа integer.

Поэтому я бы хотел, чтобы AutoFixture создала исходный объект санонимное целое число для конкретного строкового свойства, а не для всех строковых свойств.

Возможно ли это?

1 Ответ

7 голосов
/ 09 февраля 2012

Лучший способ решить эту проблему - создать основанный на соглашении генератор пользовательских значений , который назначает строковое представление анонимного числового значения определенному свойству, на основена его имя .

Итак, приведем пример, предполагая, что у вас есть такой класс:

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>();
...