Domanda
Attualmente sto usando la gerarchia di test a 2 livelli in DUNIT (Progetto di prova -> Caso di prova -> Metodo di prova; vedere Esempio di seguito). È possibile introdurre 3 ° livello o anche più livelli?
Soluzione
Puoi usare le suite di test per creare tutti i livelli di nidificazione che desideri. Il documentazione offre il seguente esempio:
Il
TestFramework
L'unità espone ilTTestSuite
Classe, la classe che implementa le suite di test, in modo da poter creare gerarchie di test utilizzando un codice più esplicito:La seguente funzione,
UnitTests
, crea una suite di test e aggiunge le due classi di test ad essa:function UnitTests: ITestSuite; var ATestSuite: TTestSuite; begin ATestSuite := TTestSuite.create('Some trivial tests'); ATestSuite.addTest(TTestArithmetic.Suite); ATestSuite.addTest(TTestStringlist.Suite); Result := ATestSuite; end;
Un altro modo per implementare la funzione di cui sopra sarebbe:
function UnitTests: ITestSuite; begin Result := TTestSuite.Create( 'Some trivial tests', [TTestArithmetic.Suite, TTestStringlist.Suite] ); end;
Nell'esempio sopra, il
TTestSuite
Il costruttore aggiunge i test nell'array passato alla suite.È possibile registrare una suite di test creata in uno dei modi precedenti utilizzando la stessa chiamata utilizzata per registrare i singoli casi di test:
initialization RegisterTest('Simple Test', UnitTests); end.
Quando corri con
GUITestRunner
, vedrai la nuova gerarchia.
Altri suggerimenti
Costruisco una gerarchia mettendo in backslashes in "SpeedPath". Per esempio:
initialization
RegisterTests('Group1\Group2', [TExampleTests1.Suite,
TExampleTests2.Suite]);
RegisterTests('Group1\Group3', [TExampleTests3.Suite,
TExampleTests4.Suite]);
end.
Alla fine ottengo qualcosa di simile:
Molto meno in giro che con David's Way e puoi diffondere le definizioni del tuo gruppo in unità disparate.
È possibile raggruppare test relativi alle suite di test, che possono essere nidificate.
Se vuoi farlo in fase di esecuzione, dai un'occhiata al mio "Open Component Test Framework (OpenCTF)" all'indirizzo FORNEFORGE.