Domanda

La mia domanda è abbastanza rilevante per qualcosa fatto prima ma ho bisogno di alcuni consigli pratici.

Ho " Funzionando efficacemente con il codice legacy " nelle mie mani e sto usando i consigli del libro mentre lo leggo nel progetto a cui sto lavorando. Il progetto è un'applicazione C ++ che consiste in alcune librerie ma la maggior parte del codice viene compilata in un singolo eseguibile. Sto usando googletest per aggiungere test unitari al codice esistente quando devo toccare qualcosa.

Il mio problema è come posso impostare il mio processo di compilazione in modo da poter costruire i miei test di unità poiché ci sono due diversi eseguibili che devono condividere il codice mentre non sono in grado di estrarre il codice dal mio "test" applicazione a una biblioteca. In questo momento ho creato il mio processo di compilazione per l'applicazione che contiene il collegamento unit test contro i file oggetto generati dal processo di compilazione dell'applicazione principale, ma non mi piace molto. Ci sono suggerimenti?

È stato utile?

Soluzione

Se l'app di test collega solo i file oggetto che deve testare, li stai già trattando come una libreria, dovrebbe essere possibile raggruppare tali file oggetto in una libreria separata per l'app principale e l'app di test. Se non ci riesci, non vedo che quello che stai facendo sia una pessima alternativa.

Se devi collegare altri file oggetto non sotto test, questo è un segno di dipendenze che devono essere interrotte, per le quali hai il libro perfetto. Abbiamo problemi simili e utilizziamo un sistema come quello suggerito da Vlion

Altri suggerimenti

Lavorare in modo efficace con il codice legacy è la miglior risorsa per iniziare test del vecchio codice. Non ci sono soluzioni a breve termine che non comporteranno un peggioramento delle cose.

Traccerò una struttura di makefile che puoi usare:

all: tests executables

run-tests: tests
    <commands to run the test suite>

executables: <file list>
    <commands to build the files>

tests: unit-test1 unit-test2 etc

unit-test1: ,files that are required for your unit-test1>
    <commands to build unit-test1>

È più o meno ciò che faccio, come unico sviluppatore nel mio progetto

Continuerei personalmente a fare ciò che stai facendo o prendere in considerazione di avere uno script di compilazione che rende l'applicazione di destinazione e i test unitari allo stesso tempo (due binari risultanti dallo stesso codice). Sì, ha un odore di pesce ma è molto pratico.

Complimenti a te e buona fortuna per i tuoi test.

Preferisco un eseguibile di test per test. Questo abilita le giunzioni dei collegamenti e aiuta anche a consentire TDD in quanto puoi lavorare su un'unità e non preoccuparti del resto del tuo codice.

Faccio dipendere le librerie da tutti i test. Spero che questo significhi che i test vengono eseguiti solo quando il codice cambia effettivamente.

Se si verifica un errore, i test interromperanno il processo di generazione nel posto giusto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top