Test di unità in esecuzione (singoli o grandi) il più velocemente possibile in c ++?

0

Sono un principiante di C ++, e fondamentalmente mi piacerebbe sapere come impostare le cose per eseguire i test unitari il più velocemente possibile, il che penso sia abbastanza equivalente nel mio caso a compilare il più velocemente possibile, senza riguardo per qualunque altra cosa. Quindi se ci sono pratiche da evitare, framework che sono più veloci o più lenti, o flag di compilazione che voglio, quali sono?

Per un singolo modulo con poche dipendenze, posso immaginare un caso in cui caricare l'app, quindi su ogni modifica al modulo pertinente ricaricarlo in Cling o qualche altro compilatore C ++ con funzionalità incrementale e quindi eseguire il test dell'unità come codice. Ho fatto cose simili nei taccuini Jupyter durante i grandi progetti Python.

Spero che ci sia un modo migliore di quello che ho appena descritto.

    
posta Elliot JJ 03.04.2017 - 04:59
fonte

2 risposte

3

Come si immagina, il punto critico nel far funzionare rapidamente una suite di test C ++ unitaria è minimizzare il tempo di compilazione. La chiave per avere una compilazione veloce in un progetto C ++ è garantire che segui religiosamente il principio di segregazione dell'interfaccia. Ogni diverso tipo di client di qualsiasi classe principale dovrebbe avere un'interfaccia separata in quella classe, dichiarata in un file di intestazione separato. Ciò significa che se l'interfaccia di classe dovesse cambiare a causa di requisiti di un client diverso, la prima classe non ha bisogno di essere ricompilata poiché la sua interfaccia rimane invariata. Ciò minimizza le parti del sistema che richiedono la ricompilazione su ogni modifica.

(Le persone spesso si interrogano sull'utilità dell'ISP. Indico che è stato creato da Robert Martin mentre lavorava come programmatore C ++)

Dovrebbero essere usati anche altri passi per ridurre il tempo di compilazione: assicurati che il compilatore e il progetto siano entrambi su una memoria veloce, preferibilmente SSD. E assicurati di avere anche un sacco di RAM.

    
risposta data 03.04.2017 - 14:58
fonte
0

For a single module with few dependencies, I can imagine a case where loading the app, then on each change to the relevant module reload it in Cling or some other incrementally capable C++ compiler and then run the unit test as code. I've done similar things in Jupyter notebooks during large python projects.

Il modo più semplice per eseguire rapidamente test unitari è scrivere test unitari. Quello che hai appena descritto non è un test unitario, ma una forma di test automatico dell'applicazione.

Utilizza un framework di test unitario e crea test che esercitano solo l'unità di funzionalità che desideri testare. Non caricare l'intera applicazione, non tentare di ricompilarlo al volo. Invece scrivi solo un test unitario che verifica solo il codice che ti interessa e non fa altro.

Ciò significa anche che sei costretto a scrivere la tua applicazione in modo molto modulare, in modo da poter eseguire ciascuna unità di funzionalità in modo indipendente senza avviare l'intera app.

    
risposta data 21.04.2017 - 13:49
fonte

Leggi altre domande sui tag