Estoy escribiendo pruebas de unidad usando nose, y me gustaría comprobar si una función genera una advertencia (la función usa warnings.warn
). ¿Es esto algo que se puede hacer fácilmente?Compruebe que una función genera una advertencia con las pruebas de nariz
7
A
Respuesta
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
En lugar de simplemente comprobar la longitud, se puede comprobar en profundidad, por supuesto:
assert str(w.args[0]) == "deprecated"
en Python 2.7 o posterior, puede hacer esto con el último cheque como:
assert str(w[0].message[0]) == "deprecated"
1
Hay (al menos) dos maneras de hacer esto. Puede ver la advertencia en list
de warnings.WarningMessage
s en prueba o usar mock
a patch
importado warnings
en su módulo.
Creo que la versión patch
es más general.
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)
Cuestiones relacionadas
- 1. Pruebas de nariz Python omitan ciertas pruebas
- 2. Ejecución de pruebas de nariz generadas
- 3. Cómo afirmar que una función no genera una excepción
- 4. Ejecutar todas las pruebas en el directorio usando la nariz
- 5. ¿Es la nariz una extensión de unittest?
- 6. Python: AssertionError cuando se ejecutan pruebas de la nariz con una cobertura
- 7. Cómo ejecutar Python pruebas de nariz con una versión diferente de Python
- 8. Nariz de Python: Log resultados de las pruebas en un archivo con complemento de multiproceso
- 9. ¿Por qué la comparación de un puntero de función miembro a NULL genera una advertencia?
- 10. ¿Cómo mido el tiempo de ejecución de las pruebas de unidades de Python con pruebas de nariz?
- 11. Compruebe si una función tiene un decorador
- 12. ¿Hay una guía para los exámenes de nariz
- 13. ¿Qué pruebas con las pruebas unitarias?
- 14. ¿Las pruebas de regresión son el conjunto de pruebas completo o una muestra de pruebas?
- 15. Compruebe si existe una función desde un script bash
- 16. Recibí una advertencia que no pude entender
- 17. Error con el sur cuando se ejecutan pruebas unitarias usando la nariz
- 18. ¿Cómo puedo determinar si una función genera un gráfico
- 19. ¿Hay una función en Python que genera todas las cadenas de longitud n sobre un alfabeto dado?
- 20. pruebas unitarias con las dependencias entre las pruebas
- 21. ¿Es posible hacer que Nariz solo ejecute pruebas que son subclases de TestCase o TestSuite (como unittest.main())
- 22. Ejecutando pruebas de unidades con Nariz dentro de un entorno Python como Autodesk Maya?
- 23. advertencia de #pragma no está suprimiendo una advertencia
- 24. Compruebe si una tecla está abajo con Qt
- 25. NHibernate genera una declaración de actualización para todas las columnas
- 26. página maestra que genera una segunda etiqueta de título
- 27. ¿Por qué este código genera una advertencia de "fuga potencial de recursos"?
- 28. Probar que una función llame a otra función con Mocha
- 29. Creando una O (1) -memoria Iterable de un objeto inicial y una función que genera el siguiente objeto, en Scala
- 30. ¿Por qué el siguiente código no genera una advertencia en MSVC
no debería ser la prueba 'len (w)> 0', sólo queremos comprobar si los' advertencias. La lista WarningMessage' está vacía. O, siguiendo [PEP8] (https://www.python.org/dev/peps/pep-0008/#programming-recommendations) simplemente prueba si las secuencias vacías son falsas –