Risposte:
I metodi o le classi di test individuali possono essere entrambi disabilitati utilizzando il unittest.skip
decoratore.
@unittest.skip("reason for skipping")
def test_foo():
print('This is foo test case.')
@unittest.skip # no reason needed
def test_bar():
print('This is bar test case.')
Per altre opzioni, consultare i documenti relativi ai test saltanti e agli errori previsti .
@unittest.skip
funziona anche bene.
@unittest.skip
non funziona.
Puoi usare i decoratori per disabilitare il test che può avvolgere la funzione e impedire che il test googletest o python unit esegua il testcase.
def disabled(f):
def _decorator():
print f.__name__ + ' has been disabled'
return _decorator
@disabled
def testFoo():
'''Foo test case'''
print 'this is foo test case'
testFoo()
Produzione:
testFoo has been disabled
L'ultima versione (2.7 - inedita) supporta il salto / disabilitazione del test in questo modo . Potresti semplicemente ottenere questo modulo e usarlo sulla tua installazione Python esistente. Probabilmente funzionerà.
Prima di questo, ho usato per rinominare i test ho voluto saltato a xtest_testname
da test_testname
.
Ecco un breve script elisp per farlo. Il mio elisp è un po 'arrugginito, quindi mi scuso in anticipo per eventuali problemi. Non testato.
(defun disable_enable_test ()
(interactive "")
(save-excursion
(beginning-of-line)
(search-forward "def")
(forward-char)
(if (looking-at "disable_")
(zap-to-char 1 ?_)
(insert "disable_"))))
È sufficiente posizionare il @unittest.SkipTest
decoratore sopra il test.
unittest.skip
(senza motivo) mi dà un errore in Python 2 ma non in Python 3.
Concentrandosi sulla parte "temporaneamente disabilitata" della domanda, la risposta migliore dipende in qualche modo dal caso d'uso. Il caso d'uso che mi ha portato qui è che sto facendo uno sviluppo test-driven su una funzione. In questo processo, scrivo successivamente i test e spesso utilizzo i punti di interruzione nella funzione per il debug. Se eseguo tutti i test ogni volta che eseguo il test runner, finisco per fermarmi nei punti di interruzione per i test che già funzionano. Aggiungere "skip" o eliminare il nome del test o qualcosa del genere non è quello che voglio perché quando ho finito di scrivere la funzione, voglio che tutti i test vengano eseguiti. Se avessi usato "skip" avrei dovuto tornare indietro e "unskip".
Nel mio caso d'uso, la soluzione sta nel test runner, non nel codice di test. Uso pytest . Con pytest, è facile specificare un singolo test dalla riga di comando:
pytest PYTHON_FILENAME.TEST_CLASS.TEST_NAME
(sostituisci i tappi con i tuoi valori).
Capisco che quella domanda fosse per Python-Unitest. Non lo uso da molto tempo. Non sarei sorpreso se avesse qualcosa di simile a Pytest. In caso contrario, puoi passare facilmente a Pytest. Non è necessario modificare il codice. Basta installarlo e modificare il comando del test runner.
Inoltre, utilizzo PyCharm Pro. Nella pagina che mostra il mio codice di test, c'è una piccola icona accanto alla def per ogni test. Posso fare clic su quell'icona ed eseguire quel test singolarmente.
@unittest.SkipTest
funziona e non@unittest.skip