Domanda

Ho alcune classi che, per un motivo o un altro, non possono essere o non deve essere unità testate. Mi piacerebbe di escludere queste classi dai miei metriche di copertura in modo che io possa avere una sensazione migliore per la copertura delle classi I realmente a cuore. In questo momento ho escludere i risultati dopo il fatto. Quello che vorrei fare è utilizzare un attributo per contrassegnare le classi escluse in modo che essi non sono inclusi per cominciare. C'è un modo per decorare una classe con un attributo che automaticamente esclude dalla analisi della copertura? In entrambi i VS analisi di copertura o NCover funzionerà.

FWIW, queste sono le classi che posso assicurarmi mediante ispezione che il codice è corretto. Per lo più sono le classi wrapper per classi del framework esistenti che ho introdotto al fine di essere in grado di prendere in giro la classe quadro fuori. Dal get del involucro deriso fuori che non fare il test. Va bene, perché tutto quello che fanno è avvolgere metodi che la classe quadro che mi preoccupo.

È stato utile?

Soluzione

A partire con VS2010 abbiamo ExcludeFromCodeCoverageAttribute . Commentatori hanno notato questo a lavorare in NCover così come dotCover + NUnit. Esempio di utilizzo:

[ExcludeFromCodeCoverage]
public class myUntestableClass
{ }

Si veda anche questo collegamento . Essi suggeriscono di usare VSInstr come strumento a riga di comando, hanno / Opzione exclude (non è così a portata di mano).

Altri suggerimenti

Ho trovato alcune informazioni su un paio di diagnostica attributi DebuggerNonUserCodeAttribute e DebuggerHiddenAttribute che indica che l'uso di questi attributi causerà l'analizzatore di copertura in VS di lasciare questi fuori dei suoi risultati. Ho provato con il DebuggerNonUserCodeAttribute e sembra funzionare. Probabilmente posso vivere con questo per la maggior parte delle classi che sto pensando di, anche se non mi piace l'effetto collaterale di non essere in grado di entrare in queste classi. Questo non dovrebbe essere un problema per le classi wrapper, ma può finire per essere così con le classi che sono intrinsecamente difficili da testare e ho bisogno di accedere al debugger.

Sono ancora alla ricerca di alternative, però.

Con NCover è possibile creare un attributo e poi dire NCover di ignorare tale attributo.

Nei nostri progetti, abbiamo definito questo attributo (senza namespace, quindi è facile da usare):

public class CoverageExcludeAttribute : Attribute { }

utilizzare NAnt, quindi abbiamo un obiettivo che assomiglia a questo:

<target name="unittests" description="run nunit tests" >        
    <ncover
        ....
        excludeAttributes="CoverageExcludeAttribute"
    />
</target>

Domanda 9 nella NCover FAQ descrive questo metodo. Abbiamo basato la nostra soluzione a questo.

In alternativa, è possibile utilizzare la funzione di esclusione del NCoverExplorer di escludere gli spazi dei nomi e le assemblee della relazione finale. Questo rimuove solo i dati del rapporto, ma il risultato finale è lo stesso.

Usiamo entrambe le tecniche.

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