2009-10-08 2 views
9

DOMANDA - Se sto avviando un'applicazione Windows Form in C# utilizzando Visual Studio 2008, quale unità di testing framework dovrei usare?Quale framework di test unitario dovrei iniziare con C# in Visual Studio 2008? (App Windows Form)

Sembra che ci sia una build in VS2008? O dovrei esaminare qualcosa come NUnit? O è NUnit ciò che viene utilizzato in VS2008 sotto il cofano? Qual è il più popolare.

sarebbe bello avere qualcosa che permette di: (a) beffardo/stub, e (b) capacità di affermare eccezioni

grazie

risposta

5

Se è solo una semplice applicazione, il framework MSTest incorporato in VS2008 dovrebbe spuntare tutte le caselle. Non è lo stesso di NUnit, anche se molte persone (erroneamente) si riferiscono ad esso come se fossero la stessa cosa.

Non l'ho mai usato per prendere in giro, quindi forse qualcun altro può elaborarlo. Genera un progetto separato nella soluzione che è solo a scopo di test. This is a good explanation of how to use it.

alt text

Edit: Facendo un po 'di più di scavo, mi sono imbattuto in this comparison di MSTest e NUnit.

Inconvenienti di NUnit quadro:

  • Installazione di NUnit è disponibile in una MSI separato.
  • Nessuna integrazione con Visual Studio.
  • Richiede la scrittura manuale di test.
  • Nessuna generazione automatica di codice.
  • Richiede l'apertura di una finestra separata (NUnit Console o GUI) per eseguire i test case.
  • Ordine di esecuzione dei casi di test non disponibile.
  • Nessuna funzione incorporata per eseguire il debug dei casi di test.
  • Nessuna funzione incorporata per abilitare/disabilitare i casi di test.
  • No caratteristica intrinseca che invia informazioni aggiuntive di casi di test, come stack trace, Trace Informazioni ecc
  • No caratteristica intrinseca di risolvere casi di test in base al nome del computer, nome della classe e tipo host ecc

Ecco dall'articolo di confronto a cui mi sono collegato.

Non ho mai usato NUnit, solo MSTest per C# e JUnit per Java, quindi sono un po 'di parte in questo senso. MSTest ha sempre funzionato molto bene per me per WinForms, con funzionalità come essere in grado di eseguire i test singolarmente, mostrare report dettagliati (con log di traccia individuali) e generare automaticamente tutto il codice di prova di boilerplate e fare tutti quei tipi di cose che rendono VS2008 un IDE così brillante. A giudicare da ciò, NUnit ha funzionato bene per gli altri e hanno le loro ragioni per cui gli piace.

A meno che tu non abbia un motivo particolare per adottare l'approccio NUnit/Testdriven.NET, come se avessi bisogno di una determinata funzione, o preferisci semplicemente quel modo di impostare i test e provare a integrarlo in VS, allora non lo faccio Non vedo alcun motivo per non usare semplicemente MSTest che funziona immediatamente.

+1

Sembra ingiusto quando molte persone usano TestDriven.NET per guidare NUnit. Ciò fornisce una grande integrazione e rimuove la maggior parte degli inconvenienti che menzioni. L'attributo NUnit [Ignora] disabilita i metodi [Test] o [TestFixture]. Inoltre, i casi di test per ordinare IMHO sono un po 'puzzolenti :) – si618

+4

ahi. 600 caratteri non saranno sufficienti. 1. questo è buono. Posso eseguire i miei test su qualsiasi macchina (build/QA) senza dover installare VSTS. 2. Se si desidera fare clic con il tasto destro del mouse ed eseguire i test, ottenere i componenti aggiuntivi Resharper/TestDriven.Net. Vedi anche SO q # 196740. # 3,4,6,10 - non ha senso. Credo che i programmatori conoscano il loro codice meglio di VS. Ne consegue che possono identificare meglio quali test scrivere. Ma poi sono infetto da test (leggi lo zealot TDD). i casi di test non dovrebbero essere dipendenti dall'ordine, quindi non sono sicuro del perché questo sia uno svantaggio. – Gishu

+2

Contd ... È possibile eseguire il debug dei casi di test (aggiungere nunit come exe esterno per eseguire il debug della DLL di test); anche se ciò implica che non conosci più il tuo codice. Ordinamento dei casi di test - ancora non sono sicuro del motivo per cui ne hai bisogno. Ma potresti raggruppare i tuoi test in categorie come [Category ("Slow Test")] e quindi includerli o escluderli dalle esecuzioni di test. Hai anche una vista casella di controllo in cui puoi spuntare manualmente i test che desideri eseguire. Infine 9. stacktrace - nunit lo fa nella prima scheda. Un framework di testing unitario sarebbe un po 'azzoppato se non indicasse la posizione esatta in cui il test falliva! – Gishu

2

direi, per semplicità, iniziare con la uno integrato nello studio visivo 2008. NUnit è fantastico e io lo uso molto, quindi puoi probabilmente passare a NUnit una volta che sei a tuo agio con i test delle unità di scrittura.

+0

i test di unità VS2008 consentono di affermare che si dovrebbe verificare un'eccezione? non riesci nemmeno a vederlo? – Greg

+2

Sì, anche se lo si fa con un attributo ([ExpectedAssertion()] credo) – Steve

8

Consiglierei l'utilizzo di NUnit per il framework di test. È molto leggero e facile da spedire in giro se è necessario installarlo su un server di build. Questo non è il caso usando MSTest. Per quanto riguarda i framework mocking/isolation, Rhino Mocks ha la più grande base di utenti e probabilmente troverai le risposte alle tue domande più velocemente con Rhino Mocks.

+1

Il più grande svantaggio con MSTest è che una volta che si avvia questa strada è difficile cambiare idea. NUnit è un po 'più facile da convertire in MSTest. Provali entrambi. –

+2

NUnit funziona anche su Mono – joemoe

5

Abbiamo iniziato con MSTest. Ha un vantaggio che è (leggermente) difficile da replicare in NUnit. Ti consente di accedere ai membri privati ​​della classe. Questo è inestimabile quando si controlla stato. Ad esempio, diciamo che ho una funzione che mette le voci in un dizionario che non è esposto. La mia comprensione è che con NUnit è necessario utilizzare la riflessione per arrivare al dizionario o aggiungere un getter al solo scopo di testare. Qui puoi controllare il dizionario. Molto facile e molto pulito. Permette anche di testare funzioni private, che adoro (so che alcune persone non credono in questo). Anche se non amo MSTest, questa funzione rende i test molto più semplici.

L'integrazione VS è anche piacevole.

+0

come fa MSTest a raggiungere "l'accesso ai membri privati" Steve lo sai? solo interessato al motivo per cui sarebbe stato facile per i ragazzi di MSTest fornire questo, ma non i ragazzi NUnit – Greg

+1

la mia comprensione è che i ragazzi di Nunit non ci credono. Con MSTest, fai semplicemente clic con il pulsante destro del mouse nella classe che desideri testare e scegli "Aggiungi accesso alla classe". Quindi accedi alla classe Foo come Foo_Accessor nel tuo test. – Steve

+0

Il mio gruppo è relativamente nuovo per il test delle unità e ci sono molte cose che ci sono piaciute di NUnit, ma il materiale di accesso privato è stato un vero problema. – Steve

3

Utilizzare MSTest. È integrato in VS2008 e supporta l'IDE per la creazione di funzioni di test. Se e quando "sorpassi" MSTest, allora dovresti guardare NUnit o il più moderno xUnit. Puoi aspettarti eccezioni in MSTest decorando con l'attributo ExpectedException.

[Test] 
[ExpectedException(typeof(ArgumentNullException))] 
public void Should_throw_ArgumentNullException_when_the_Order_is_null() 
{ 
    OrderProcessor processor = new OrderProcessor(); 
    processor.ProcessOrder(null); 
} 

I framework di simulazione sono indipendenti dalla scelta del framework di test. Le scelte più comuni per il framework di simulazione sono: Moq e Rhino Mocks.

+1

Questo può essere fatto anche con nUnit. –

+1

Di sicuro. E puoi anche eseguire NUnit da Visual Studio se disponi di un nuovo programma di ricerca. –

+0

MSTest non usa l'attributo [Test]. Questo è usato in NUnit e MbUnit, che rende questi due intercambiabili, anche un bonus per non usare MSTest, sei più fortemente legato a un framework. –

1

Lei non ha menzionato se si stavano per essere prove di guida codice ..

  • andare con NUnit, se non hai familiarità con qualsiasi dei quadri xUnit. La più piccola curva di apprendimento. È stato in giro più a lungo. Charlie Poole è attivo su NUnit (open source) e ha una buona storia di buoni aggiornamenti.
  • VS2008 ha MSTest integrato al suo interno. Non è lo stesso di NUnit. Non ho mai avuto motivo di passare da NUnit. Direi che NUnit ha sicuramente la più grande base di utenti.
  • NUnit ha qualcosa in bundle per Mock ma sicuramente ti indicherò su Moq. Rhino Mocks è stato il migliore per un po 'di tempo, ma Moq ha una curva di apprendimento più semplice (dai documenti online) anche se potrebbe non gestire sempre gli edge edge ... eppure IMHO
  • L'esclusione delle eccezioni è supportata in entrambi.

Suggerirei di ottenere un libro sottile 'Pragmatic Unit Testing in C# with NUnit' e di esaminarlo almeno una volta.

Sulla riga NUnit v MSTest, non sono idoneo a commentare. 0 tempo di volo con MSTest.

  • Anche se ho sentito che VS2010 offrirà bigiotteria come report di copertura automatica del codice ..solo se hai i test MSTest. Ma questo è il tipo di argomento che continuo a sentire in MSTest favore .. più sulle linee di supporto IDE e integrazione. Ci sono ottimi componenti aggiuntivi come Resharper e TestDriven che possono applicarlo in patch ma a un prezzo.
  • Anche IMHO, gli strumenti di testing unitario di Microsoft hanno un modo sottile di guidarti lungo il sentiero oscuro. perciò stai attento. Vedi il mio commento a Dale su questo thread.