So che questa è una domanda molto antica, ma vorrei aggiungere la mia esperienza lì di recente ho cambiato l'abitudine di test unitari da progetti separati alla stessa.
Perché?
In primo luogo, tendo a mantenere la stessa struttura delle cartelle del progetto principale con il progetto di test. Quindi, se ho un file sottoProviders > DataProvider > SqlDataProvider.cs
sto creando la stessa struttura nei miei progetti di unit test comeProviders > DataProvider > SqlDataProvider.Tests.cs
Ma dopo che il progetto sta diventando sempre più grande, una volta spostati i file da una cartella all'altra o da un progetto a un altro, allora sta diventando un lavoro molto ingombrante per sincronizzare quelli con i progetti di unit test.
In secondo luogo, non è sempre molto facile spostarsi dalla classe da testare alla classe di unit test. Questo è ancora più difficile per JavaScript e Python.
Di recente, ho iniziato a esercitarmi in questo, ogni singolo file che ho creato (ad esempio SqlDataProvider.cs
) sto creando un altro file con suffisso Test, comeSqlDataProvider.Tests.cs
All'inizio sembra che si gonfino i file e i riferimenti alle librerie, ma a lungo termine, eliminerai la sindrome dei file in movimento a prima vista, e inoltre ti assicurerai che ogni singolo file che sono candidati al test avrà un file di coppia con .Tests
suffisso. Ti dà la possibilità di saltare nel file di test (perché è fianco a fianco) invece di guardare attraverso un progetto separato.
È anche possibile scrivere regole aziendali per eseguire la scansione del progetto e identificare la classe che non ha file .Test e segnalarli al proprietario. Inoltre puoi dire facilmente al tuo runner di test le .Tests
classi target .
Soprattutto per Js e Python non sarà necessario importare i riferimenti da percorsi diversi, è possibile semplicemente utilizzare lo stesso percorso del file di destinazione testato.
Sto usando questa pratica da un po 'di tempo e penso che sia un compromesso molto ragionevole tra dimensione del progetto vs manutenibilità e curva di apprendimento per i nuovi arrivati al progetto.