Domanda

Dove inserisci i test unitari per le funzioni private nelle classi C#?

UN articolo su Wikipedia suggerisce:

  • Mettere i test nella stessa classe dei membri che stanno testando
  • Utilizzo di classi parziali

Personalmente, nessuno di questi metodi sembra appropriato e preferisco di gran lunga che i test unitari si trovino in un progetto completamente separato.

Qualche idea su questo?

(So ​​che si discute molto sull'opportunità o meno di testare i metodi privati.Mi piacerebbe sentire entrambi i lati della questione.)

È stato utile?

Soluzione

I metodi privati ​​non devono necessariamente essere testati direttamente.È possibile determinarne la validità in base a test di metodi pubblici che utilizzano tali metodi privati.

Tuttavia, dovresti fare attenzione a garantire che i tuoi metodi pubblici possano facilmente inserire dipendenze fittizie nei tuoi metodi privati ​​per facilitare il test e simulare tutti gli scenari ragionevoli.

Modificare: Per quanto riguarda dove dovrebbero essere posizionati gli altri test, suggerisco una sottodirectory separata all'interno del tuo progetto per gestire i tuoi test.Quando scrivo test per applicazioni PHP, ho un file test directory nella radice del mio progetto la cui struttura di directory è identica a quella della struttura di directory della mia applicazione reale.In esso, ho una lezione di prova per ogni classe reale.

Basta non compilare le classi di test con il resto del progetto quando lo rilasci in produzione (o, nel caso di un linguaggio interpretato come PHP, non distribuire le classi di test sul server web di produzione).

Altri suggerimenti

Non eseguire test unitari sui metodi privati.Gli unit test servono per testare l'interfaccia visibile (quindi pubblica e protetta) di una classe.I metodi privati ​​sono dettagli di implementazione e scrivere unit test per essi non è necessario (il loro comportamento dovrebbe essere implicitamente testato dai test sui metodi visibili), porta a test fragili (poiché i dettagli di implementazione potrebbero cambiare) e costituisce una barriera al refactoring.

Se disponi di un metodo privato che ritieni necessario testare unitariamente, questo è un grande suggerimento che forse dovrebbe essere preso in considerazione in un metodo pubblico su un'altra classe.

Dove inserisci i test unitari per le funzioni private nelle classi C#?

Luogo inesistente.Non esistono.

In generale, i miei test unitari sono in progetti separati.

Personalmente mi piace anche avere test unitari in un progetto separato.Se desideri eseguire un test unitario di un metodo privato, puoi invece rendere interno il metodo privato.È quindi possibile rendere visibili i metodi interni ai test unitari per chiamarli direttamente aggiungendo quanto segue a AssemblyInfo.cs:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]

Dovresti fare ciò che funziona per te;ecco cosa funziona per me:

Mio l'unità è una classe:è quello che sto cercando di testare.Non un metodo.Sto cercando di fare programmazione orientata agli oggetti, quindi rivolgo la mia attenzione agli oggetti.

Se mi trovo tentato di testare un metodo privato, devo farlo refactoring.Voglio testare direttamente un metodo privato solo perché c'è troppo altro codice tra esso e i test e perché il metodo privato stesso è abbastanza complesso da richiedere attenzione da parte del test.Quindi, di solito estraggo la classe per inserire quel metodo privato e altri membri correlati in una nuova classe.

Le mie lezioni tendono ad essere tranquille piccolo.Sono facili da leggere e comprendere.I miei metodi, ovviamente, sono anche molto piccoli e facili da capire.

Me lo ha richiesto il passaggio a questo modo di lavorare ripensare molte delle mie supposizioni e abitudini riguardo alla programmazione.Ciò che una volta sembrava radicale, ora sembra banale.

Sono d'accordo sul fatto che i metodi privati ​​non dovrebbero essere testati, in generale, perché dovresti testare solo le interfacce pubbliche.

Detto questo, ci sono ragioni per cui potresti voler testare i metodi privati:

  1. Stai utilizzando TDD e devi sviluppare un metodo privato complesso.La creazione di metodi di test per il metodo privato potrebbe essere necessaria per mantenere il ciclo test di scrittura-scrittura codice-test con la giusta granularità.

  2. Potresti far parte di un team in cui altri potrebbero aver bisogno di modificare il metodo privato e desideri che i test garantiscano che le modifiche non creino problemi.

Alcune soluzioni:

  1. Dichiarare alcuni metodi pubblici che delegano al metodo privato e vengono utilizzati solo a scopo di test.Questi potrebbero essere preceduti ad es.con TestFoo1, TestFoo2 ecc.

  2. Usa interno

http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx

Il titolo della domanda e la prima frase sono diversi.:)

Non sono sicuro di dove posizionare i test.Ciò dipenderebbe dalla lingua e C# non è qualcosa con cui ho familiarità, ma immagino che una parte sostanziale del tuo codice sia all'interno di metodi privati.Mi sentirei a disagio se non fosse testato.La copertura del codice diminuirebbe notevolmente.

Utilizziamo funzioni di accesso private in Visual Studio per testare metodi privati.Ciò significa che le classi di prova possono vivere in un progetto separato.

Cerchiamo però di limitare realmente il numero di questi perché:

  • un metodo privato che può stare da solo può essere estratto come metodo pubblico in un'altra classe
  • i metodi privati ​​che non fanno nulla di particolarmente utile al di fuori della classe possono essere testati tramite i metodi pubblici di quella classe

assolutamente si.i metodi privati ​​dovrebbero comunque essere testati.E mbunit il framework di unit test può accedere al membro privato.

vedi questo blog:testare metodi privati

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