2009-10-21 12 views
16

Sfondo: Visual Studio 2008, C#, .Net 3.5.Come decorare una classe come non testabile per la copertura del codice?

Ho un numero di classi di utilità che non sono semplicemente unità testabili. Ciò è principalmente dovuto al fatto che interagiscono con le risorse (ad es. Database, file ecc.).

C'è un modo per decorare queste classi in modo che il motore di copertura del codice di Visual Studio li ignorerà, quindi non diminuendo la percentuale di copertura del codice?

+0

Duplicato: http://stackoverflow.com/questions/1289429/use-attribute-to-omit-code-da-cover-analysis-in-visual-studio – tvanfosson

risposta

14

C'è una risposta in this article su come usare [System.Diagnostics.DebuggerHidden] o [System.Diagnostics.DebuggerNonUserCode] Attributi per escludere metodi dalla copertura del codice.

aggiornamento secondo il commento di David:

Come di .NET 4.0 v'è un attributo dedicato per questo: [ExcludeFromCodeCoverage]

+1

Un punto di cautela (dall'articolo precedente) - "DebuggerHidden impedirà di entrare nel metodo o di impostare i breakpoint in quel codice e DebuggerNonUserCode nasconderà il codice come (sic) tempo di debug e lo scavalcherà automaticamente." – Dunc

+3

Nota importante: A partire da .NET 4.0 esiste un attributo dedicato per questo: '[ExcludeFromCodeCoverage]' – David

+0

Grazie a @David la nota è stata aggiunta alla risposta. –

1

Uno dei motivi per cui si desidera scrivere unit test è quello di rendere il codice liberamente accoppiato. È possibile leggere this article se si è interessati a imparare come scrivere codice liberamente accoppiato (nel caso non si sappia come).

Dicendo che puoi provare a utilizzare strumenti come TypeMock che possono aiutarti a prendere in giro i tuoi oggetti anche se non li scrivi usando Dependency Injection principle.

TypeMock è stato il primo Mock Framework che ho usato. Passo a Rhino Mocks perché con TypeMock non dovevo essere abbastanza disciplinato da scrivere codice liberamente accoppiato.

+2

Scriviamo codice molto buono, liberamente accoppiato; ma a un certo punto, qualcosa deve effettivamente accedere a una risorsa! –

+0

Si creano wrapper per queste risorse e si utilizzano i wrapper nel codice di produzione anziché le risorse stesse. Controlla il link nella mia risposta. – Vadim

Problemi correlati