Domanda

Ho circa 100 test di unità e con una copertura del 20%, che sto cercando di aumentare la copertura e anche questo è un progetto in fase di sviluppo in modo da continuare ad aggiungere nuovi test.

Attualmente in esecuzione i miei test dopo ogni build non è fattibile che dura circa 2 momenti.

Prova Include:

  • File di leggere dalle cartelle di prova (stile data-driven per simulare alcune cose HTTP)
  • Fare le richieste HTTP effettivi a un web-server locale (questo è un dolore enorme per prendere in giro, quindi non lo farò)
  • Non tutti loro unità di test, ma ci sono anche abbastanza complicato classi multithread che devono essere testati e faccio testare il comportamento complessivo del test. Che possono essere considerate come Functional Testing ma hanno bisogno di essere eseguito ogni volta pure.

La maggior parte delle funzionalità richiede la lettura di HTTP, TCP facendo ecc non posso cambiarle, perché questo è l'intera idea di progetto se cambio questi test sarà inutile testare roba.

Anche io non credo di avere gli strumenti più veloci per eseguire unit test. La mia configurazione corrente utilizza VS TS con Gallio e NUnit come quadro. Credo che VS TS + Gallio è un po 'più lento di altri pure.

Che cosa mi consiglia per risolvere questo problema? Voglio correre unità di test dopo ogni piccola cosa cambia btu attualmente di questo problema sta interrompendo il mio flusso.

ulteriori chiarimenti Edit:

Codice è altamente accoppiata! Purtroppo e il cambio è come un enorme processo refatoring. E c'è una sindrome uova di pollo in esso in cui ho bisogno unit test per il refactoring un grande codice tale, ma non posso avere più test di unità se non refactoring:)

codice

altamente accoppiata non mi permette di dividere i test in porzioni più piccole. Anche io non prova roba privata, è una scelta personale, che mi permette di sviluppare in modo molto più veloce e ancora guadagnare una grande quantità di beneficio.

E posso confermare che tutti i test di unità (con una corretta separazione) in realtà abbastanza veloce, e non hanno un problema di prestazioni con loro.


Un ulteriore chiarimento:

Codice è altamente accoppiata! Purtroppo e il cambio è come un enorme processo refatoring. E c'è una sindrome uova di pollo in esso in cui ho bisogno unit test per il refactoring un grande codice tale, ma non posso avere più test di unità se non refactoring:)

codice

altamente accoppiata non mi permette di dividere i test in porzioni più piccole. Anche io non prova roba privata, è una scelta personale, che mi permette di sviluppare in modo molto più veloce e ancora guadagnare una grande quantità di beneficio.

E posso confermare che tutti i test di unità (con una corretta separazione) in realtà abbastanza veloce, e non hanno un problema di prestazioni con loro.

È stato utile?

Soluzione

Questi non suonano come unit test per me, ma più come test funzionali. Va bene, l'automazione di test funzionali è buona, ma è abbastanza comune per i test funzionali per essere lento. Stanno testando l'intero sistema (o grandi pezzi di esso).

I test unitari tendono ad essere veloce perché sono testando una cosa in modo isolato da tutto il resto. Se non è possibile testare le cose in modo isolato da tutto il resto, si dovrebbe considerare che un segnale di avvertimento che il codice è troppo strettamente accoppiati .

Si può dire che testa avete che sono unit test (test 1 cosa sola) vs. test funzionali (test 2 o più cose allo stesso tempo)? Quali sono veloci e quelli che sono lenti?

Altri suggerimenti

Si potrebbe dividere il test in due gruppi, uno per le prove brevi e uno per le prove di lunga durata, ed eseguire le prove di lunga durata meno frequentemente durante l'esecuzione di brevi test dopo ogni modifica. Oltre a questo, beffardo le risposte dal server web e altre richieste tuoi rende l'applicazione sarebbe portare ad un test-run più breve.

mi sento di raccomandare un approccio combinato al vostro problema:

  • eseguire frequenti un sottoinsieme dei test che sono vicini al codice si apportano modifiche a (ad esempio i test dello stesso pacchetto, modulo o simili). Meno frequentemente eseguire i test che sono più rimossi dal codice che si sta attualmente lavorando.
  • Dividi vostra suite in almeno due: corsa veloce e le prove di marcia lenta. Eseguire i test veloce in esecuzione più spesso.
  • Si consideri avere alcuni dei meno probabilità di fallire i test da eseguire solo da un server di integrazione automatica continua.
  • Imparare le tecniche per migliorare le prestazioni dei vostri test. Ancora più importante, sostituendo l'accesso alle risorse del sistema lenti da falsi più veloci. Ad esempio, l'uso in memoria flussi invece di file. Stub / deridere l'accesso HTTP. ecc.
  • Informazioni su come utilizzare bassa dipendenza rischio tecniche di rottura, come quelli elencati nella (altamente consigliato) libro "Lavorare in modo efficace con il codice legacy". Questi consentono di effettuare in modo efficace il vostro codice più verificabili senza applicare refactoring ad alto rischio (spesso rendendo temporaneamente la progettazione vera e propria peggio, come rompere l'incapsulamento, fino a quando è possibile refactoring per una migliore progettazione con la rete di sicurezza di test).

Una delle cose più importanti che ho imparato dal libro di cui sopra: non c'è magia, lavorando con il codice legacy è il dolore, e sempre sarà il dolore. Tutto quello che puoi fare è accettare questo fatto, e fate del vostro meglio per lavorare lentamente la via d'uscita dal caos.

In primo luogo, quelli non sono i test di unità.

Non c'è molto di un punto l'esecuzione di test funzionali come che dopo ogni piccolo cambiamento. Dopo un cambio di considerevoli dimensioni si desidera eseguire i test funzionali.

In secondo luogo, non abbiate paura di prendere in giro la parte Http dell'applicazione. Se davvero si vuole unit test l'applicazione è un deve. Se il vostro non è disposto a fare questo, si sta andando a perdere molto più tempo cercando di testare la logica attuale, in attesa per le richieste HTTP di tornare e cercando di impostare il backup dei dati.

vorrei mantenere i test livello di integrazione, ma si sforzano di creare unit test reali. Questo risolverà i vostri problemi di velocità. test di unità reale non hanno interazione DB, o interazione HTTP.

Io uso sempre una categoria per "LongTest". Quelli di test vengono eseguiti ogni notte e non durante il giorno. In questo modo è possibile ridurre il tempo di attesa da un sacco. Provalo:. Categoria vostra unità di test

Sembra che potrebbe essere necessario per gestire le aspettative tra il team di sviluppo pure.

Si considera che le persone stanno facendo diversi costruisce al giorno e sono epxected eseguire i test dopo ogni generazione. Si potrebbe abbiamo ben servito far passare il proprio programma di test per eseguire una build con i test durante il pranzo e poi un altro per tutta la notte.

Sono d'accordo con Brad che questi suonano come test funzionali. Se si può tirare il codice a parte che sarebbe grande, ma fino ad allora mi piacerebbe passare a test meno frequenti.

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