2010-03-01 13 views
8

Ho un metodo denominato RenderContent che restituisce object[]
Nel mio test di unità, ho bisogno di affermare che questo array non contiene oggetti di tipo VerifyRequestNUnit: qual è il modo più conciso per affermare se un oggetto IEnumerable contiene un oggetto di un certo tipo?

Al momento, sto utilizzando la seguente Assert dichiarazione. C'è qualcosa di più conciso?

Assert.That(
    domain.RenderContent().OfType<VerifyRequest>().Count(), 
    Is.EqualTo(0) 
); 

Preferisco utilizzare la sintassi fluente. Si noti inoltre che RenderConten restituisce object[], non IQueryable<object>.

risposta

14

Se si utilizza NUnit 2.5, si potrebbe usare qualcosa come:

Assert.That(domain.RenderContent(), Has.None.InstanceOf<VerifyRequest>()); 

Ma io non sono sicuro se altri framework di unit test supportano questa asserzione in stile.

1

Si potrebbe accorciare un po 'utilizzando il metodo Assert.AreEqual invece:

Assert.AreEqual(domain.RenderContent().OfType<VerifyRequest>().Count(), 0); 
+0

Sì, ma non NUnit avere una costruito nel sintassi-helper per questo? – goofballLogic

12

Anche se io non conosco la sintassi esatta NUnit per IsFalse affermazione, la soluzione migliore per questo tipo di test è la Any metodo di estensione:

Assert.IsFalse(domain.RenderContent().OfType<VerifyRequest>().Any()); 

potrebbe essere tentati di utilizzare il metodo Count, ma Any è più efficiente, poiché si romperà sulla prima occorrenza.

1

Preferisco l'approccio Assert.AreEqual; NUNit usa Assert.That per gli oggetti Assert, STringAssert, etc interni. Mi piace solo fare Assert.AreEqual (0, domain.RenderContent(). OfType(). Count()); per verificare i conteggi.

In questo modo, controlla direttamente che nessun oggetto di un tipo abbia un numero qualsiasi di record, ma a un certo punto le variazioni che vedi sono preferenziali e sono tutte ugualmente valide. Devi scegliere quello che ti piace per il tuo stile di sviluppo.

2

Il Qualsiasi metodo di estensione, che può essere data un'espressione lambda:

Assert.IsFalse(domain.RenderContent().Any(i => i is VerifyRequest)); 
Problemi correlati