In che modo le lingue tipizzate staticamente gestiscono il rilevamento dei test? [chiuso]

3

Vengo da uno sfondo Python, quindi sono abituato a una scoperta di test piuttosto automatica. Ad esempio, la libreria py.test individua automaticamente tutti i file che iniziano con test , trova le classi i cui nomi iniziano con Test all'interno di tali file e quindi chiama tutte le funzioni i cui nomi iniziano con test_ in quelle classi .

Questo tipo di scoperta dei test è abilitato dal profondo supporto di Python per la riflessione e il dinamismo.

Queste funzionalità sono spesso assenti in linguaggi tipizzati staticamente, perché sono difficili da integrare con il sistema di tipi.

Pertanto, sono interessato a sapere quali approcci utilizzano le lingue tipizzate in modo statico per semplificare la scoperta dei test?

    
posta Alex Gaynor 29.03.2014 - 21:08
fonte

3 risposte

4

Molti linguaggi tipizzati staticamente utilizzano ancora la riflessione per questo scopo, ad esempio, JUnit3 chiama tutti i metodi denominati testWhatever e go test cerca i metodi denominati TestWhatever() in qualsiasi file _test.go .

JUnit4 sembra fare affidamento sul sistema di "annotazioni" di Java - supporta un'annotazione @Test che è disponibile in fase di esecuzione e viene utilizzata per il rilevamento dei test ( link ).

Ho personalmente fatto alcuni cose orribili e terribili in C usando __attribute__((section)) di GCC e il preprocessore per implementare un DSL per i test - vedi dettagli di implementazione . Non lo consiglio veramente.

    
risposta data 29.03.2014 - 21:10
fonte
1

Quasi tutti i linguaggi con caratteri statici hanno il tipo di runtime e il rilevamento dei metodi. L'eccezione principale è C / C ++.

Nel mondo .NET, riflessione e attributi forniscono un ambiente particolarmente ricco per l'individuazione e la gestione dei test, utilizzati sia da Visual Studio sia da NUnit.

Il mondo Java ha qualcosa di simile, vedi JUnit.

Questi sono i "tre grandi". Scala, Haskell e alcuni altri linguaggi correlati sono anche tipizzati staticamente, ma forniscono ampio supporto per il rilevamento dei tipi.

Immagino che il mondo tipizzato statico possa fare praticamente tutto ciò che puoi fare in Python, solo un po 'diversamente. C / C ++ è un mondo a parte.

    
risposta data 30.03.2014 - 12:12
fonte
0

Golang gestisce questo usando il modulo parser per analizzare i file di test e quindi generare un nuovo programma che esegue i file di test, compilando quel programma ed eseguendolo: link

    
risposta data 29.03.2014 - 21:12
fonte

Leggi altre domande sui tag