Ich schreibe Komponententests mit nose, und ich möchte überprüfen, ob eine Funktion eine Warnung auslöst (die Funktion verwendet warnings.warn
). Ist das etwas, das leicht gemacht werden kann?Überprüfen, ob eine Funktion eine Warnung mit Nasentests auslöst
7
A
Antwort
9
def your_code():
# ...
warnings.warn("deprecated", DeprecationWarning)
# ...
def your_test():
with warnings.catch_warnings(record=True) as w:
your_code()
assert len(w) > 1
Anstatt nur die Länge überprüfen, können Sie es im Detail überprüfen, natürlich:
assert str(w.args[0]) == "deprecated"
In Python 2.7 oder höher, können Sie dies mit der letzten Prüfung tun können, wie:
assert str(w[0].message[0]) == "deprecated"
1
Es gibt (mindestens) zwei Möglichkeiten dies zu tun. Sie können die Warnung im list
von warnings.WarningMessage
s im Test abfangen oder mock
bis patch
das importierte warnings
in Ihrem Modul verwenden.
Ich denke, die patch
Version ist allgemeiner.
raise_warning.py:
import warnings
def should_warn():
warnings.warn('message', RuntimeWarning)
print('didn\'t I warn you?')
raise_warning_tests.py:
import unittest
from mock import patch
import raise_warning
class TestWarnings(unittest.TestCase):
@patch('raise_warning.warnings.warn')
def test_patched(self, mock_warnings):
"""test with patched warnings"""
raise_warning.should_warn()
self.assertTrue(mock_warnings.called)
def test_that_catches_warning(self):
"""test by catching warning"""
with raise_warning.warnings.catch_warnings(True) as wrn:
raise_warning.should_warn()
# per-PEP8 check for empty sequences by their Truthiness
self.assertTrue(wrn)
Verwandte Themen
- 1. debug JS-Code, der eine Warnung auslöst()
- 2. Überprüfen Sie, ob eine Funktion @classmethod verwendet
- 3. JQuery überprüfen, ob eine Var eine Funktion ist
- 4. Überprüfen, ob eine Klasse eine Funktion hat, die Parameter enthält
- 5. Überprüfen, ob meine Funktion eine andere Funktion überschreibt
- 6. Überprüfen, ob eine Funktion vom Typ ist Funktion in Javascript
- 7. Überprüfen, ob eine Formulareingabe existiert
- 8. Wie testen Sie, dass eine Python-Funktion eine Ausnahme auslöst?
- 9. Bestätigen, dass eine Funktion Ausnahmen mit Qunit auslöst
- 10. Wie man eine Funktion mit verschiedenen IDs auslöst
- 11. Überprüfen Sie, ob eine Zeichenfolge mit http beginnt mit Javascript
- 12. Überprüfen Sie, ob eine Klassenmethode
- 13. überprüfen, ob eine C-Stil-Funktion vom Typ 'MyMethodName()' existiert?
- 14. Überprüfen, ob eine Funktion von einem Bash-Skript existiert
- 15. Clojure Makro um zu überprüfen, ob eine Funktion aufgerufen wurde
- 16. Überprüfen Sie, ob eine Funktion in Swift verfügbar ist.
- 17. Knoten js zu überprüfen, ob ein var ist eine Funktion
- 18. Clojure Unit Test: Überprüfen Sie, ob eine Funktion aufgerufen wurde
- 19. Überprüfen Sie, ob eine Zeichenfolge eine bestimmte Zeichenfolge mit Array
- 20. Überprüfen Sie, ob eine Zeichenfolge serialisiert ist?
- 21. jQuery überprüfen, ob Element eine Klasse hat
- 22. Überprüfen, ob ein Argument eine Zeichenfolge
- 23. Überprüfen Sie, ob eine Zeichenfolge in C++
- 24. Überprüfen Sie, ob eine Zeichenfolge Leerzeichen hat
- 25. Überprüfen, ob eine Variable eine Ganzzahl in Javascript ist
- 26. Überprüfen, ob eine Matrix eine Identitätsmatrix in Matlab ist
- 27. VimL: Überprüfen, ob Funktion existiert
- 28. Überprüfen, ob eine Konsolenanwendung noch mit der Prozessklasse
- 29. Überprüfen, ob Fenster eine MessageBox ist
- 30. TypeScript - Überprüfen, ob Klasse eine Schnittstelle implementiert
sollte nicht den Test 'len werden (w)> 0 ', wir wollen nur, wenn die' Warnungen überprüfen. WarningMessage-Liste ist leer. Oder testen Sie nach [PEP8] (https://www.python.org/dev/peps/pep-0008/#programming-recommendations) einfach, ob leere Sequenzen falsch sind –