Im moment gibt es mehr Möglichkeiten, um Daten für Tests (nicht nur Unit-Tests), zum Beispiel zu erzeugen, Object Mutter, Bauherren, usw. Ein weiterer nützlicher Ansatz ist Testdaten im Klartext schreiben:DSL Testdaten zu generieren
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 analysieren. Dies ist einfach in Komponententests zu verwenden (weil tiefe innere Sammlungen in einer einzigen Zeile geschrieben werden können), dies ist noch praktischer in FitNesse-ähnlichen Systemen (da diese DSL natürlich in das Wiki passt) und so weiter.
Also ich benutze dies und schreibe Parser, aber es ist mühsam jedes Mal zu schreiben. Ich bin kein großer Experte für DSL/Sprach-Parser, aber ich denke, dass sie hier helfen können. Was wäre der richtige zu verwenden? Ich nur gehört:
- DSL (ich meine, jeder DSL)
- Boo (die ich denken kann DSL tun)
- ANTLR
aber ich weiß nicht einmal, welches man auswählen und wo man anfangen soll.
Also die Frage: ist es vernünftig, irgendeine Art von DSL zu verwenden, um Testdaten zu erzeugen? Was würdest du dazu vorschlagen? Gibt es Fälle?
Update: scheint wie ich nicht klar genug war. Es geht nicht um rohe String-Objekt-Konvertierung. Schauen Sie auf dem ersten Linie und in Beziehung zu
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 die erste Teil Produkt erstellen und es dann zur Haupt hinzufügen, auch wenn es in umgekehrter Reihenfolge aufgeführt ist. Die Preise werden auf eine besondere Art gehandhabt. Ich möchte den Namen des Unterprodukts angeben und einen Verweis darauf erhalten - erstellt. Ich möchte alle Produkteigenschaften - FLAT und NON-REPEATATIVE - in einer Zeile auflisten. Ich möchte Standardwerte für Eigenschaften verwenden. Und so weiter.
Update: Ich bin nicht überzeugt, DSL zu vermeiden, weil alle alternativen Beispiele zu ausführlich und nicht benutzerfreundlich sind. Und niemand hat etwas Nützliches über DSL gesagt.
Es ist viel ausführlicher, vor allem, wenn Sie hinzufügen, dass die Preise nicht nur Intars sind und enthält keine Zeichenfolgen, sondern Verweise auf andere Produkte (siehe Update). Ich möchte schreiben "Preise: 145, 255" und Parser sollte wissen, dass zuerst Hauptproduktpreis und zweitens Maintenance-Produktpreis ist. Ohne jedes Mal diese Details zu schreiben. – queen3
Und wenn ich schreibe "Preise: 145" Parser sollte schlau genug sein, um beide Preise auf den gleichen Wert zu setzen. Oder, vielleicht, Wartung zum halben Preis. Wenn Sie solche Details hinzufügen, sehen Sie die Notwendigkeit für DSL. – queen3
@ queen3: In Bezug auf Ihren ersten Kommentar stimme ich zu; ob sich ein DSL lohnt, kommt auf die eigene Schmerzgrenze für Leitungsrauschen an. Ihr zweiter Punkt ist jedoch falsch; Der Setter für 'TestProduct.Prices' kann leicht sehen, ob ein oder zwei Preise geliefert wurden, und Ihre Regeln entsprechend anwenden. –