Convenzioni di denominazione dei test .NET [chiuso]
-
01-07-2019 - |
Domanda
Quali sono le migliori convenzioni per denominare gli assembly di test in .NET (o qualsiasi altro linguaggio o piattaforma)?
Ciò su cui sono principalmente diviso sono queste opzioni (per favore forniscine altre!):
- Sito web aziendale - il progetto
- Azienda.Sito.Test
O
- Sito web aziendale
- Company.WebsiteTest
Il problema con la prima soluzione è che sembra che .Tests sia uno spazio dei nomi secondario del sito, mentre nella mia mente sono più paralleli.Cosa succede quando entra in gioco un nuovo spazio dei nomi secondario, ad esempio Azienda.Sito.Controlli, dove dovrei inserire i test per quello spazio dei nomi, ad esempio?
Forse dovrebbe anche essere: Test.Azienda.Sito web E Test.Azienda.Sito.Controlli, e così via.
Soluzione
andrò con
* Company.Website - the project
* Company.Website.Tests
Il breve motivo e la risposta sono semplici, test e progetto sono collegati nel codice, quindi dovrebbero condividere lo spazio dei nomi.
Se desideri dividere il codice e testarlo in una soluzione, hai comunque questa opzione.per esempio.puoi impostare una soluzione con
-Cartella dei codici
- Sito web aziendale
-Cartella Test
- Azienda.Sito.Test
Altri suggerimenti
Personalmente ci andrei
Azienda.Test.Sito web
In questo modo hai uno spazio dei nomi di test comune e progetti al suo interno, seguendo la stessa struttura del progetto reale.
In realtà ho una radice parallela alternativa.
Test.Azienda.Sito web
Funziona bene per chiarire le ambiguità quando si hanno nuovi spazi dei nomi secondari.
Sono un grande fan della strutturazione dello spazio dei nomi di test in questo modo:
Azienda.Test.Sito Web.xxx
Azienda.Test.Sito.Controlli
Come te, penso ai test come a una struttura dello spazio dei nomi parallela al codice principale e questo te lo fornisce.Ha anche il vantaggio che, poiché lo spazio dei nomi inizia comunque con il nome della tua azienda, non dovresti avere conflitti di denominazione con librerie di terze parti
Anch'io preferisco "Test" anteponendo il nome effettivo dell'assembly in modo che sia facile vedere tutti i miei assiemi di test unitari elencati in ordine alfabetico insieme quando li seleziono in massa per inserirli in NUNit o qualunque cablaggio di test tu stia utilizzando.
Quindi, se Sito Web fosse il nome della mia soluzione (e dei miei assiemi), suggerisco:
Tests.Website.dll per andare avanti con l'effettivo assemblaggio del codice Sito Web.Dll
Seguiamo un approccio integrato:
Company.Namespace.Test
Company.Namespace.Data.Test
In questo modo i test sono vicini al codice che viene testato, senza dover passare da un progetto all'altro o cercare riferimenti per assicurarsi che esista un test che copre un metodo particolare.Inoltre, non dobbiamo mantenere due gerarchie separate, ma identiche.
Possiamo anche testare parti distinte del codice mentre miglioriamo e sviluppiamo.
All'inizio sembra un po' strano, ma a lungo termine ha funzionato davvero bene per noi.
Di solito nomino i progetti di test Test di progetto per brevità in Solution Explorer e utilizzo Company.Namespace.Tests per gli spazi dei nomi.
Preferisco andare con:
Azienda.Sito.Test
Non mi interessano i sottospazi dei nomi come Company.Website.Controls, tutti i test vanno nello stesso spazio dei nomi:Azienda.Sito.Test.Non vuoi che i tuoi spazi dei nomi di test DEVONO essere in parallelo con il resto del tuo codice perché fa semplicemente sì che il refactoring degli spazi dei nomi richieda il doppio del tempo.
Preferisco Company.Website.Spec e di solito ho un progetto di test per soluzione
Con MVC che inizia a diventare una realtà nel mondo dello sviluppo web .net, inizierei a pensare in questo senso.Ricordiamo che M, V e C sono componenti distinte, quindi:
- Azienda.Spazio dei nomi.Sito web
- Azienda.Spazio dei nomi.Sito web.Core
- Azienda.Namspance.Website.Core.Tests
- Azienda.Spazio dei nomi.Sito web.Modello
- Azienda.Spazio dei nomi.Sito web.Modello.Test
Il sito web è la tua visione leggera.Il core contiene controller, helper, interfacce di visualizzazione, ecc.Core.Tests sono i test per detto Core.Il modello è per il tuo modello di dati.La cosa interessante qui è che i test del modello possono automatizzare i test specifici del database.
Questo potrebbe essere eccessivo per alcune persone, ma trovo che mi permetta di separare le preoccupazioni abbastanza facilmente.