Attualmente sto implementando il mio linguaggio di programmazione. Fino ad ora ho scritto:
-
Una classe
Error
per errori (da lanciare) incontrati durante l'elaborazione del codice sorgente di input; -
Alcune funzioni
SyntaxError
(ognuna con un tag diverso, passate con un modello, comeSyntaxError<malformed_number>()
oSyntaxError<unexpected_symbol>
) che aiutano a costruireError
oggetti con diversi messaggi di errore (per ora ho ottenuto solo questo, ma presto avròFunctionError
s,IndexError
s e così via); -
Una classe
Token
che contiene le informazioni su ciascun token (riga nella stringa in cui si trovava quando è stata rilevata, il tipo che può esserestring
,number
... cose come quella ); -
Infine, una funzione
lexer
che prende come imput una stringa di codice sorgente e restituisce un oggettostd::list<Token*>
. Internamente, utilizza alcune funzioni di supporto (buildname
,builsymbol
,skipcomment
...) per aiutare a mantenere il codice organizzato.
Non ho seguito alcuna particolare tecnica di programmazione per codificarlo, ma ora sento l'impulso di seguire quelli che vanno sotto il nome di Programmazione Test Developement.
Ma ho alcune preoccupazioni:
-
Innanzitutto, cosa devo testare nel codice sopra? Ovviamente la funzione
lexer
dovrebbe essere testata a fondo, e forse anche le funzioni di aiuto che usa (credo), ma che dire delle altre cose? -
In secondo luogo, come posso testare le funzioni con un output non banale? Online vedo molti esempi che confrontano numeri semplici o stringhe, ma come si scrive un test per una funzione che restituisce un elenco di puntatori agli oggetti senza dover scrivere troppo per un singolo test case?