2009-11-24 6 views
11

Alcuni dei metodi Asser NUnit sono sovraccarichi per utilizzare ICollection ma non ICollection<T> e quindi non è possibile utilizzarli.Perché o come utilizzare i metodi NUnit con ICollection <T>

C'è comunque intorno a questo? Diamine, sto facendo qualcosa di stupido?

Devo ricorrere all'utilizzo di Assert.AreEqual piuttosto che a metodi specializzati e rende brutti i miei test.

Qualche consiglio?

Edit:

Grazie per le risposte. Il metodo That di NUnit sembra interessante, quindi lo esaminerò in un secondo momento.

Marchio correttamente menzionato, ma NUnit Collection Asserts sono eccellenti. Li ho usati di recente su alcuni nuovi test e li ho trovati eccellenti con cui lavorare.

+0

Devo menzionare, nella mia classe sto testando. Cambiando il metodo restituisci il tipo a Lista invece di IList risolve questo problema ma a mia volta sto esponendo Lista che non voglio per ragioni ampiamente discusse su SO ecc. Già. – Finglas

+0

Non ci dovrebbero essere problemi nell'usare linq per trasformare la tua collezione in una lista, purché tu non stia facendo valere nulla che non sia presente nella collezione. Asserire che il metodo ForEach funzioni ad esempio sarebbe una cattiva forma. –

risposta

8

ICollection e ICollection<T> sono contratti diversi: uno non eredita l'altro.

http://msdn.microsoft.com/en-us/library/system.collections.icollection_members.aspx http://msdn.microsoft.com/en-us/library/y2fx0ty0.aspx

Se si dispone di un insieme generico si può chiamare ToList() su di esso e ottenere un List<T>, che succede ad implementare il non generico ICollection pure. Quindi utilizzare tale lista nel metodo NUnit Assert.

+0

Smashing. Linq ha salvato il giorno (ancora una volta). Saluti, non ci ho pensato. – Finglas

+1

Linq potrebbe non salvare la giornata, dandoti solo un ricordo colorato di rosa che porterà alla delusione più tardi. –

+0

Beh, mi ha dato ToList(), sono felice. – Finglas

7

ci sono una serie di CollectionAsserts, oppure si potrebbe ereditare il test da AssertHelper e utilizzare la sintassi come

Expect(actual, Is.EquivalentTo(expected)); 

Uno sguardo alla documentazione dovrebbe darvi la sintassi per i vincoli che si applicano alle collezioni.

Ecco un link (questa è la versione 2.5.2)

N.B. Aspettatevi è solo una scorciatoia per Assert.That ...

+0

La tua risposta è migliore di quella accettata, che peccato. Solo 3 minuti di ritardo per acceptdom. –

9

Non so se questo è quello che stai cercando, ma per le collezioni generiche invece di utilizzare:

Assert.Contains(member, list); 

io uso:

Assert.That(list.Contains(member)); 

che trovo quasi leggibile.

Problemi correlati