El marco de pruebas unitarias unittest se utiliza para validar que el código funciona según lo diseñado. Para lograr esto, unittest admite algunos métodos importantes de forma orientada a objetos:
- accesorio de prueba
- caso de prueba
- Banco de pruebas
- corredor de pruebas
Se puede obtener una visión más profunda de los términos anteriores en https://www.geeksforgeeks.org/unit-testing-python-unittest/
assertRaises() : permite encapsular una excepción, lo que significa que la prueba puede lanzar una excepción sin salir de la ejecución, como suele ser el caso de las excepciones no controladas. La prueba pasa si se genera una excepción, da un error si se genera otra excepción o falla si no se genera ninguna excepción.
Hay dos formas de usar assertRaises:
- utilizando argumentos de palabras clave.
assertRaises(exception, function, *args, **keywords)
Simplemente pase la excepción, la función invocable y los parámetros de la función invocable como argumentos de palabra clave que provocarán la excepción.
- usando el administrador de contexto
assertRaises(exception)
Realice una llamada de función que debería generar la excepción con un contexto. El administrador de contexto detectará una excepción y la almacenará en el objeto en su atributo de excepción. Esto es útil cuando tenemos que realizar comprobaciones adicionales sobre la excepción planteada.
Escribimos una prueba unitaria que falla si una función no lanza una excepción o cuando una excepción lanzada por una declaración de afirmación es diferente de la excepción esperada . Por lo tanto, con este método podemos verificar si una función genera una excepción o no.
Ejemplo 1 :
Python3
import unittest class MyTestCase(unittest.TestCase): # Returns true if 1 + '1' raises a TypeError def test_1(self): with self.assertRaises(Exception): 1 + '1' if __name__ == '__main__': unittest.main()
Producción :
. ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
Aquí, en la salida el «.» en la primera línea de salida significa que la prueba pasó y la función lanzó una excepción de TypeError al agregar un valor entero y un valor de string .
Ejemplo 2:
Python3
import unittest class MyTestCase(unittest.TestCase): # Returns false if 1 + 1 raises no Exception def test_1(self): with self.assertRaises(Exception): 1 + 1 if __name__ == '__main__': unittest.main()
Producción :
F ====================================================================== FAIL: test_1 (__main__.MyTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/5bc65171e57a3294596f5333f4b7ed53.py", line 6, in test_1 1 + 1 AssertionError: Exception not raised ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (failures=1)
Dado que sumar un entero a otro entero (en este caso, 1 + 1) no genera ninguna excepción, la prueba unitaria falla.
Ejemplo 3:
Python3
import unittest class MyTestCase(unittest.TestCase): # Returns true if 100 / 0 raises an Exception def test_1(self): with self.assertRaises(ZeroDivisionError): 100 / 0 if __name__ == '__main__': unittest.main()
Producción :
. ---------------------------------------------------------------------- Ran 1 test in 0.000s OK
Cualquier número dividido por 0 da la excepción ZeroDivisionError . Por lo tanto, en el ejemplo 3, cuando 100 se divide por 0, genera una excepción de tipo ZeroDivisionError, lo que hace que se apruebe unittest. De este modo «.» en la salida significa que se ha pasado la prueba.
Ejemplo 4:
Python3
import unittest class MyTestCase(unittest.TestCase): # Returns true if GeeksforGeeks.txt file is not present and raises an EnvironmentError # Exception # In this example expected exception is RuntimeError while generated exception is # EnvironmentError, thus returns false def test_1(self): with self.assertRaises(RuntimeError): file = open("GeeksforGeeks.txt", 'r') if __name__ == '__main__': unittest.main()
Producción :
E ====================================================================== ERROR: test_1 (__main__.MyTestCase) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/8520c06939bb0023b4f76f381b2c8cf2.py", line 11, in test_1 file = open("GeeksforGeeks.txt", 'r') FileNotFoundError: [Errno 2] No such file or directory: 'GeeksforGeeks.txt' ---------------------------------------------------------------------- Ran 1 test in 0.001s FAILED (errors=1)
Cuando intentamos abrir un archivo que no existe, genera un IOError que es una subclase de EnvironmentError . En el ejemplo anterior, la prueba de unidad falló porque se esperaba que el tipo de excepción que generaría la función fuera del tipo RuntimeError , en lugar de eso, generó una excepción de EnvironmentError . Dado que la excepción generada y la excepción esperada son diferentes, produce un error.
Publicación traducida automáticamente
Artículo escrito por rohanchopra96 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA