2012-05-23 9 views
5

Sto usando il naso 1.1.2 per scrivere test per un progetto Python. Esiste questa funzione assert_raises che è menzionata nella documentazione ma non riesco a trovarla da nessuna parte.Dove è la funzione assert_raises del naso?

Dovrebbe essere una scorciatoia per qualcosa di simile:

value_error_raised = False 
try: 
    do_something_that_should_raise_value_error() 
except ValueError: 
    value_error_raised = True 
assert value_error_raised 

type_error_raised = False 
try: 
    do_something_else_that_should_raise_type_error() 
except TypeError: 
    type_error_raised = True 
assert type_error_raised 

che sarebbe diventato:

assert_raises(ValueError, 
       do_something_that_should_raise_value_error) 

assert_raises(TypeError, 
       do_something_else_that_should_raise_type_error) 

Ho già cercato il codice sorgente e l'unica menzione che ho trovato ero in tools.py modulo, all'interno della documentazione raises:

Se si desidera testare molte asserzioni sulle eccezioni in un singolo test, potresti invece utilizzare assert_raises.

Questa funzione è stata rimossa dal naso? Se è così, qualcuno potrebbe aiutarmi a capire perché?

risposta

7
>>> from nose.tools import assert_raises 
>>> assert_raises 
<bound method Dummy.assertRaises of <nose.tools.Dummy testMethod=nop>> 
>>> import nose 
>>> nose.__version__ 
'1.1.2' 

Io personalmente uso le classi unittest2.TestCase con nosetests e uso self.assertRaises.

+0

Ok, funziona! Grazie! Mi sono appena reso conto che la ragione per cui non è definita esplicitamente su nose.tools è perché è una soluzione attraverso l'implementazione di unittest.TestCase assertRaise. Di conseguenza eclipse continua a riportare un errore di importazione su 'da nose.tools import assert_raises'. – tbellardi

+0

non è solo quello in cui PyDev è sbagliato, in un progetto più grande che usa Jython ricordo di dover aggiungere eccezioni per più di cento identificatori ... –

5

Utilizzare il decoratore @raises(*exceptions) per la funzione di test.

+4

Questo verifica se una delle eccezioni è stata sollevata, quindi avrei bisogno di una funzione di test per ogni errore atteso generato. Se voglio una singola funzione di test per verificare molte eccezioni sollevate, ciò non mi aiuta. – tbellardi

1

Questa risposta si applica al motivo per cui non è possibile trovare informazioni su assert_raises.

Da nose documentation:

Il modulo nose.tools fornisce [...] tutti gli stessi metodi assertX trovati nelle unittest.TestCase (farro solo in PEP 8 modo, così assert_equal anziché assertEqual)

Qui ci sono PEP 8's suggested function naming e list of assertX methods nella documentazione di base di Python.

Problemi correlati