mock - python unittest
Simulacros: ¿Cómo hago una excepción en la persona que llama? (1)
Supongamos que este es el código
def move(*args, **kwargs):
try:
shutil.move(source, destination)
except Exception as e:
raise e
y en mi tests.py
@patch.object(shutil, ''move'')
def test_move_catch_exception(self, mock_rmtree):
'''''' Tests moving a target hits exception. ''''''
mock_rmtree.side_effect = Exception(''abc'')
self.assertRaises(Exception, move,
self.src_f, self.src_f, **self.kwargs)
Dijo esto
File "unittests.py", line 84, in test_move_catch_exception
self.src_f, self.src_f, **self.kwargs)
AssertionError: Exception not raised
Si lo afirmo en mock_rmtree
pasará. ¿Cómo puedo hacer valer a la persona que llama (en este caso, la función move
)?
Como señaló aquavitae , las razones principales fue el error de copiar y pegar, y también estaba afirmando una tupla al principio. Siempre aseverar con el tipo de retorno correcto ...
Tienes un error tipográfico en tu ejemplo, falta un ''
.
No está del todo claro lo que está preguntando, pero si lo entiendo correctamente, está preguntando cómo probar que una excepción elevada está atrapada dentro del move
. Un problema es que está shutil.rmtree
, no shutil.move
, pero no puede estar seguro de que shutil.rmtree
vez se llame a shutil.rmtree
. shutil.move
solo llama a shutil.rmtree
si copia un directorio con éxito, pero como se está copiando self.src_f
a sí mismo, esto no sucede. Sin embargo, esta no es una buena manera de parchearlo, ya que la suposición de que shutil.move
llamará a shutil.rmtree
no está garantizada y depende de la implementación.
En cuanto a cómo probarlo, simplemente verifique que el valor de retorno sea el esperado:
@patch.object(shutil, ''move'')
def test_move_catch_exception(self, mock_move):
'''''' Tests moving a target hits exception. ''''''
e = OSError(''abc'')
mock_move.side_effect = e
returns = move(self.src_f, self.src_f, **self.kwargs)
assert returns == (False, e)