Ho cercato la documentazione, ma non ho trovato nessuna. C'erano una coppia che non spiegava molto.Come usare gli assert_raises del naso?
qualcuno può spiegare a me funzione
assert_raises(what should I put here?)
del naso e come usarlo?
Ho cercato la documentazione, ma non ho trovato nessuna. C'erano una coppia che non spiegava molto.Come usare gli assert_raises del naso?
qualcuno può spiegare a me funzione
assert_raises(what should I put here?)
del naso e come usarlo?
I test di funzione assert_raises()
assicurano che una chiamata di funzione sollevi un'eccezione specificata quando viene presentata con determinati parametri.
Ad esempio, se si dispone di una funzione add
che aggiunge due numeri, è probabile che venga generato un valore TypeError
quando lo si passa, ad esempio, un numero intero e una stringa. Quindi:
from nose.tools import assert_raises
def add(x, y):
return x + y
assert_raises(TypeError, add, 2, "0")
Il primo argomento è il tipo di eccezione che ci si aspetta. Il secondo è la funzione da chiamare. Il resto degli argomenti verrà passato alla funzione (in questo caso, diventeranno x
e all'interno della funzione).
Se l'eccezione prevista viene aumentata dalla funzione, passa l'asserzione.
Mentre la risposta accettata è corretta, penso che sia meglio utilizzare il metodo assert_raises
.
Se si desidera semplicemente affermare che si verifica un'eccezione, è probabilmente più semplice e più pulito utilizzare la sintassi @raises
.
@raises(HTTPError)
def test_exception_is_raised:
call_your_method(p1, p2)
tuttavia, supporre che si vuole fare po 'di più con l'eccezione sollevata, ad esempio: abbiamo bisogno di affermare che sollevato HTTPError è di tipo 401: non autorizzato, invece di 500: Errore del server.
In una situazione di cui sopra la sintassi non è così utile, dovremmo usare lo assert_raises
ma in un modo diverso. Se non lo passiamo a callable
, il secondo parametro assert_raises
restituirà un contesto che possiamo utilizzare per testare ulteriormente i dettagli dell'eccezione.
def test_exception_is_raised:
with assert_raises(HTTPError) as cm:
call_your_method(p1, p2)
ex = cm.exception # raised exception is available through exception property of context
ok_(ex.code == 401, 'HTTPError should be Unauthorized!')
Grazie mi ha insegnato qualcosa di nuovo. – user1544624
Mi piacerebbe vedere il messaggio dell'eccezione. L'ex che ottengo da cm.exception ha un ex.message vuoto. L'eccezione è comunque sollevata con un messaggio. Cosa sta andando storto? – akshitBhatia
L'unico posto in cui sono riuscito a trovare informazioni su come farlo ... –
Ok, grazie! Ma sai anche un link per una buona documentazione naso dove posso checkout altre funzioni del naso, come assert_equal, assert_raises! @kindall – user1544624
ho avuto difficoltà a trovare anche quello. Puoi comunque provare 'help (assert_rases)'. – kindall
Un po 'nascosto, ma http://nose.readthedocs.org/en/latest/testing_tools.html#module-nose.tools afferma gli stati del primo paragrafo: "... e tutti gli stessi metodi assertX trovati in unittest.TestCase (solo scritto in modo PEP 8, quindi assert_equal piuttosto che assertEqual). ". Ecco la lista: http://docs.python.org/2/library/unittest.html#assert-methods –