Существует несколько способов создания данных для тестов (не только модульных тестов), например, Object Mother, компоновщиков и т. Д. Еще один полезный подход - записать тестовые данные в виде простого текста:
product: Main; prices: 145, 255; Expire: 10-Apr-2011; qty: 2; includes: Sub
product: Sub; prices: 145, 255; Expire: 10-Apr-2011; qty: 2
, а затем разберите его на объекты C #. Это легко использовать в модульных тестах (потому что глубокие внутренние коллекции можно записать в одну строку), это еще удобнее использовать в системе, подобной FitNesse (потому что этот DSL естественным образом вписывается в вики) и т. Д.
Так что я использую это и пишу парсер, но каждый раз писать утомительно. Я не большой специалист по DSL / анализаторам языка, но я думаю, что они могут помочь здесь. Что будет правильным для использования? Я только слышал о:
- DSL (я имею в виду, любой DSL)
- Бу (что я думаю, может сделать DSL)
- ANTLR
но я даже не знаю, какой из них выбрать и с чего начать.
Итак, вопрос: разумно ли использовать какой-либо DSL для генерации тестовых данных? Что бы вы предложили сделать? Существуют ли какие-либо случаи?
Обновление: похоже, я не достаточно ясно. Речь идет не о преобразовании необработанных строк в объекты. Посмотрите на первую строку и соотнесите ее с
var main = Product.New("Main")
.AddPrice(Price.New(145).WithType(PriceType.Main).AndQty(2))
.AddPrice(Price.New(255).WithType(PriceType.Maintenance).AndQty(2))
.Expiration(new DateTime(10, 04, 2011));
var sub = Product
.New("Sub").Parent(main)
.AddPrice(...));
main.AddSubProduct(sub);
products.Add(main);
products.Add(sub);
И обратите внимание, что я сначала создаю субпродукт, а затем добавляю его в основной, хотя он указан в обратном порядке. Цены обрабатываются особым образом. Я хочу указать название продукта Sub и получить ссылку на него - создано. Я хочу перечислить все свойства продукта - FLAT и NON-REPEATATIVE - в одной строке. Я хочу использовать значения по умолчанию для свойств. И так далее.
Обновление: я не убежден, чтобы избежать DSL, потому что все альтернативные примеры слишком многословны и не удобны для пользователя. И никто не сказал ничего полезного о DSL.