Если я правильно понимаю, все свойства класса относятся к типу string
, но представляют другие типы данных (логические, целые или даты).
Мое предложение было бы создать класс FixtureBuilder с типами свойств, которые вы ожидаете. С Autfixture вы сможете генерировать случайные значения и затем преобразовывать их в представление CSV.
public class CsvData
{
public string Enabled { get; set; }
public string Quantity { get; set; }
public string Price { get; set; }
}
public class CsvDataBuilder
{
public bool Enabled { get; set; }
public int Quantity { get; set; }
public decimal Price { get; set; }
public CsvData ToCsvData()
{
return new CsvData
{
Enabled = Enabled.ToString(),
Quantity = Quantity.ToString(),
Price = Price.ToString()
};
}
}
Затем в тестах вы можете создать конструктор в
var dataFromCsv = new Fixture().Create<CsvDataBuilder>().ToCsvData();
Рабочее решение размещено на моем блоге:
http://borismod.blogspot.com/2009/04/wcf-collectiondatacontract -and.html
UPD: Спасибо за ваш комментарий, Джефф. Вот краткое описание здесь не универсального класса. Полное общее решение можно найти в новом посте в моем блоге: http://borismod.blogspot.com/2009/06/v2-wcf-collectiondatacontract-and.html
[DataContract(IsReference = true)]
public class EntityCollectionWorkaround : ICollection
{
#region Constructor
public EntityCollectionWorkaround()
{
Entities = new List();
}
#endregion
[DataMember]
public int AdditionalProperty { get; set; }
[DataMember]
public List Entities { get; set; }
#region ICollection Members
// Implement here members of ICollection by wrapping Entities methods
#endregion
#region IEnumerable Members
// Implement here members of IIEnumerable by wrapping Entities methods
#endregion
}
Вы могли бы хотеть рассмотреть реализующую пользовательскую сериализацию для своего класса. Могло бы быть самым легким реализовать IXmlSerializable
, произведите значения своего пользовательского свойства и затем используйте DataContractSerializer
сериализировать экземпляры дочерних объектов в наборе к выводу.