Es gibt verschiedene Möglichkeiten, Daten für Tests (nicht nur Unit-Tests) zu generieren, z.B. Object Mother, Builder, etc. Ein weiterer nützlicher Ansatz besteht darin, Testdaten als reinen Text zu schreiben:
product: Main; prices: 145, 255; Expire: 10-Apr-2011; qty: 2; includes: Sub product: Sub; prices: 145, 255; Expire: 10-Apr-2011; qty: 2
und dann in C#-Objekte zerlegen. Dies ist einfach in Unit-Tests zu verwenden (weil tiefe innere Sammlungen in einer einzigen Zeile geschrieben werden können), dies ist noch bequemer, in FitNesse-ähnlichen System zu verwenden (weil diese DSL natürlich in Wiki passt), und so weiter.
Also benutze ich diese und schreiben Parser, aber es ist mühsam, jedes Mal zu schreiben. Ich bin kein großer Experte für DSL/Sprachparser, aber ich denke, sie können hier helfen. Welcher wäre der richtige für mich? Ich habe nur von gehört:
- DSL (ich meine, tout DSL)
- Boo (der meiner Meinung nach DSL machen kann)
- ANTLR
aber ich weiß nicht einmal, welches ich auswählen und wo ich anfangen soll.
Die Frage ist also: Ist es sinnvoll, eine Art DSL zu verwenden, um Testdaten zu erzeugen? Was würden Sie vorschlagen, um dies zu tun? Gibt es bereits Beispiele?
Update: scheint, wie ich war nicht klar genug. Es geht nicht um die Konvertierung von raw string in object. Schauen Sie sich die erste Zeile an und beziehen Sie sie auf
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);
Und beachten Sie, dass ich zuerst ein Unterprodukt erstelle und es dann dem Hauptprodukt hinzufüge, auch wenn es in umgekehrter Reihenfolge aufgelistet ist. Die Preise werden auf besondere Weise behandelt. Ich möchte den Namen des Unterprodukts angeben und einen Verweis auf dieses Produkt erhalten - erstellt. Ich möchte alle Produkteigenschaften - FLAT und NON-REPEATATIVE - in einer einzigen Zeile auflisten. Ich möchte Standardwerte für Eigenschaften verwenden. Und so weiter.
Update: Ich bin nicht davon überzeugt, DSL zu vermeiden, weil alle alternativen Beispiele zu langatmig und nicht benutzerfreundlich sind. Und niemand hat etwas Nützliches über DSL gesagt.