2015-10-19 16 views
22

Dopo aver inviato query a un servizio, ottengo un dizionario/una lista e voglio assicurarmi che non sia vuoto. Sono su Python 2.7.C'è un modo per verificare con Python unittest assert se un iterabile non è vuoto?

Sono sorpreso di non vedere alcun metodo assertEmpty per l'istanza della classe unittest.TestCase.

Le alternative esistenti, quali:

self.assertTrue(bool(d)) 

e

self.assertNotEqual(d,{}) 

e

self.assertGreater(len(d),0) 

semplicemente non guardare a destra.

Questo tipo di metodo manca nel framework unittest di Python? Se sì, quale sarebbe il modo più poderoso per affermare che un iterabile non è vuoto?

+1

http://stackoverflow.com/questions/53513/best-way-to-check-if-a-list-is-empty Potrebbe essere di aiuto. – CollinD

+0

Buon collegamento! So come verificare se un iterable è vuoto però; era alla ricerca di metodi di asserzione specificamente unittest ... Sorpresi non ci sono metodi AssuredEmpty/assertNotEmpty - imho migliorerebbe molto la leggibilità, invece di avere assertTrue e assertFalse tutto intorno al codice ... –

+2

D'accordo, ho appena capito che 'assertTrue' è forse un tad cleaner. Penso che la mia preferenza personale (e forse l'opzione più semanticamente significativa) sarebbe quella di affermare len! = 0. Concordo sul fatto che un metodo assertEmpty/assertNotEmpty ha un posto nel framework unittest. – CollinD

risposta

39

vuote liste/dicts restituiscano false, in modo self.assertTrue(d) ottiene il lavoro fatto.

+0

Giusto. Quindi non affermare metodi in unittest che controllerebbero il vuoto? Annoying to have assertTrue and assertFalse tutto il codice ... –

+0

Nessun metodo di asserzione per verificare la presenza di vuoto - [unittest] (https://docs.python.org/2/library/unittest.html#assert-methods). – gplayer

1

Forse:

self.assertRaises(StopIteration, next(iterable_object)) 
+2

Questo non è l'ideale in generale, dal momento che potrebbe consumare un articolo che è necessario esaminare successivamente. – chepner

+0

Il miglior rivestimento, poiché funziona anche per i generatori. Se stai provando per un iterabile vuoto, non dovresti aver bisogno di guardare i suoi elementi. –

+0

Questo non attirerà l'eccezione, è necessario inserirlo in una funzione. –

4

Dipende esattamente da quello che stai cercando.

Se si vuole fare in modo l'oggetto è un iterabile e non è vuoto:

# TypeError: object of type 'NoneType' has no len() 
# if my_iterable is None 
self.assertTrue(len(my_iterable)) 

Se è OK per l'oggetto in fase di test per essere None:

self.assertTrue(my_maybe_iterable)