Autofixture: Добавить неуниверсальный метод Create (Type)

Созданный на 19 нояб. 2015  ·  2Комментарии  ·  Источник: AutoFixture/AutoFixture

Я (ab) использую Autofixture для создания примеров документации для веб-API. Сообщения (команды и запросы), которые Autofixture создаст для меня, сериализуются в JSON и становятся частью документации. Это действительно очень хорошо работает, и для этого требуется несколько строк кода по сравнению с сотнями строк уродливого кода, которые шаблон VS для веб-API генерирует в своей области / HelpPage (фу).

В настоящее время для этого я использую следующий код:

`` С #
частный статический только для чтения MethodInfo CreateMethodInfo =
GetMethod (() => SpecimenFactory.Create(новый прибор ()))
.GetGenericMethodDefinition ();

общедоступный статический объект Create (Тип типа)
{
var fixture = new Fixture ();
int index = 1;
fixture.Register (() => "образец текста" + индекс ++);

return CreateMethodInfo.MakeGenericMethod(type).Invoke(null, new object[] { fixture });

}

частный статический MethodInfo GetMethod (Выражение> methodCall) =>
((MethodCallExpression) methodCall.Body) .Method;
`` ''

Поскольку я не знаю точное сообщение во время компиляции, я не могу вызвать метод Autofixture Fixture.Create<T>() . Как показывает приведенный выше код, в настоящее время я решил эту проблему путем вызова этого универсального метода Create<T> с использованием отражения.

Есть ли более простой способ достичь моей цели, и если нет, можно ли добавить в библиотеку неуниверсальный метод Create(Type) ?

Самый полезный комментарий

Подойдет ли это решение?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Все 2 Комментарий

Подойдет ли это решение?

c# var specimen = new SpecimenContext(fixture).Resolve(type);

Прохладный! Это трюк! Спасибо.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги