Come strutturare semplici progetti C ++ per TDD

6

Sto introducendo Google Test nel nostro ambiente di sviluppo sul posto di lavoro e vorrei incoraggiare una mentalità TDD, rendendo questo il più accessibile possibile per i nuovi sviluppatori. Sto cercando consigli sulla struttura del progetto standard da seguire per progetti C ++ Eclipse relativamente semplici. Questi sarebbero generalmente dell'ordine di circa 10-30 classi per i progetti di ingegneria.

Attualmente sto organizzando le cartelle in questo modo:

  1. src
  2. includere
  3. test
  4. gtest_src

Inoltre, è consigliabile che il test divida qualsiasi progetto in tre sottoprogetti?

Ie:

  1. Libreria (per il test)
  2. Progetto eseguibile
  3. Prova progetto

Si dovrebbero combinare 1. e 3. in un unico progetto?

Dopo un po 'torno su C ++ con più attenzione su C # e Python e questa struttura mi sembra un po' dolorosa per ogni nuovo progetto.

    
posta drexiya 04.03.2016 - 09:37
fonte

1 risposta

9

Aggiungere questo come risposta (perché lungo :)), ma la "migliore" struttura del tuo progetto è soggettiva.

Tendo ad applicare questa esatta architettura per i miei progetti C ++, sia a casa (CMake + XCode) che al lavoro (Visual Studio):

  • usa una libreria di test dell'unità separata (il tuo gtest_src)
  • usa le librerie statiche che implementano le funzionalità di base
  • usa le applicazioni eseguibili sottili
  • usa applicazioni separate per il test.

È una buona idea tenere separati i test dal codice (o come un'altra libreria aggiuntiva o scritti direttamente nelle applicazioni di test.

A casa, ho il seguente:

librerie statiche:

  • unittest (unità testando la lib fisica)
  • logging (logging static lib)
  • net (networking static primitive lib)
  • strumenti (codice e strumenti generici riutilizzabili, algoritmi, ecc.)

test libs:

  • unittest-tests (test dinamici lib)
  • log-test (test dinamici lib)
  • net-tests (test dinamici lib)
  • strumenti-test (test dinamici lib)
  • test-runner (app) (funziona con le librerie di test passate come argomenti cli di input)
  • varie altre applicazioni di rete
risposta data 04.03.2016 - 12:31
fonte

Leggi altre domande sui tag