| 

.NET C# Java Javascript Exception

1
Ich habe einen Parser für Formeln wie (1+2)*3 geschrieben. Der Parser erzeugt einen Parse-Tree wie in diesem Fall

new Mul(new Add(new Const(1), new Const(2)), new Const(3))


Ich habe den Parser jetzt für einige Fälle mit Unit Tests geprüft, ich stelle aber immer wieder weitere Fälle fest, die mir noch nicht eingefallen waren, die aber Fehler enthalten. Wie gehe ich am besten vor, um den Parser möglichst 100%ig zu testen?
31.07.2009
alexander 860 2 9
2 Antworten
3
Kennst Du schon Pex? Du erstellst einen Unit-Test wie folgt:

void TestValidResult(string input)
{
try {
var ast = Parser.Parse(input);
Assert.IsNotNull(ast);
}
catch (ParsingException) { }
catch (Exception) { Assert.Fail(); }
}


Dieser Test testet, das für alle inputs gilt: Entweder wird ein Syntaxbaum geparst oder es gibt eine Parsing-Exception (aber keine NullReferenceException z.B.). Das geniale ist jetzt, dass Pex den Test für lauter interessante Inputs ausführt und so ziemlich schnell deinen _ganzen_ Parser mit einem Test checkt.
01.08.2009
jor 791 2 7
1
Mit PEX hat Mircosoft ein wirklich geniales Tool geschaffen. Es lohnt sich für jeden Unit-Tester mal einen Blick darauf zu werfen.
gfoidl 02.08.2009
1
Der Test kann mit dem PEX-Wizard auch automatisch erstellt werden. Somit ist es schon fast ein Kinderspiel einen Test zu erzeugen.
gfoidl 02.08.2009
1
In der Doku zu PEX gibt es sogar ein Beispiel für Parser:
http://research.microsoft.com/en-us/um/redmond/projects/pex/wiki/TinyLanguage.html
gfoidl 05.08.2009
1
Running the same test with different inputs könnte von Interesse sein.

Edit:
Eine eher wissenschaftliche Abhandlung dazu bietet Grammar based Unit-testing for parsers.
31.07.2009
gfoidl 9,4k 3 5
1
Das mache ich momentan. Das Problem ist mehr, dass ich nicht in der Lage bin, alle Fälle zu erkennen und zu checken.
alexander 31.07.2009
1
Siehe editierte Antwort.
gfoidl 31.07.2009

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH