У меня есть класс, который полностью состоит из строковых типов ... Я не доволен этим, но не могу изменить его. Этот класс является представлением некоторых CSV, которые анализируются.
Теперь я хотел бы создать поддельные экземпляры. Например, я хотел бы сгенерировать случайные логические значения и преобразовать их в строку. Для этого я создал реализацию ISpecimenBuilder
, которая работает до сих пор.
public class MyPropertyBuilder : ISpecimenBuilder
{
private readonly Random rand;
public MyPropertyBuilder()
{
this.rand = new Random();
}
public object Create(object request, ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi == null)
{
return new NoSpecimen();
}
if (pi.PropertyType == typeof(string) && pi.Name == "MyPropertyName")
{
return (this.rand.NextDouble() > 0.5).ToString();
}
return new NoSpecimen();
}
}
Но я как-то не понимаю, как правильно использовать context.Resolve()
и классы *Request
, такие как RangedNumberRequest()
, как в следующем фрагменте кода.
public class UnsignedIntegerNumberBuilder : ISpecimenBuilder
{
public object Create(object request, ISpecimenContext context)
{
var pi = request as PropertyInfo;
if (pi == null)
{
return new NoSpecimen();
}
if (pi.PropertyType == typeof(string) && pi.Name == "ORDER_NR")
{
return context.Resolve(new RangedNumberRequest(typeof(int), 0, int.MaxValue)).ToString();
}
return new NoSpecimen();
}
}
Конечно, я могу реализовать свой собственный способ генерации случайного логического значения и заставить MyPropertyBuilder
возвращать это, но разве это не противоречит цели AutoFixture, когда я каким-то образом заново изобретаю часть генерации данных для некоторых типов примитивов?
Итак, я предполагаю, что вопрос заключается в следующем: как правильно использовать генератор логических значений AutoFixtures для определенного свойства?