2011-09-18 7 views
6

Muchos módulos de Python conservan un estado interno sin definir clases, p. Ej. logging mantiene varios registradores accesibles a través de getLogger().volver a importar el módulo bajo prueba para perder el contexto

¿Cómo se prueba un módulo de este tipo?
Usando las herramientas estándar unittest, me gustaría que las diversas pruebas dentro de una clase TestCase vuelvan a importar mi módulo bajo prueba para que cada vez pierda su contexto. Se puede hacer esto?

Respuesta

7
import unittest 
import sys 

class Test(unittest.TestCase): 
    def tearDown(self): 
     try: 
      del sys.modules['logging'] 
     except KeyError: 
      pass 
    def test_logging(self): 
     import logging 
     logging.foo=1 
    def test_logging2(self): 
     import logging 
     print(logging.foo) 

if __name__ == '__main__': 
    unittest.sys.argv.insert(1,'--verbose') 
    unittest.main(argv = unittest.sys.argv)  

% test.py Test.test_logging pases:

test_logging (__main__.Test) ... ok 

pero % test.py Test.test_logging2 no:

test_logging2 (__main__.Test) ... ERROR 

ya que el estado interno de logging se ha restablecido.

3

Esto vuelva a importar el módulo como nueva para usted:

import sys 
del sys.modules['my_module'] 
import my_module 
+0

Creo que te refieres a 'del sys.modules ['my_module']' –

+0

Sí, muy bien. Editaré la respuesta. –

Cuestiones relacionadas