reimportar módulo bajo prueba para perder contexto

Muchos módulos de Python conservan un estado interno sin definir clases, por ejemplo, el logging mantiene varios registradores accesibles a través de getLogger() .

¿Cómo se prueba tal módulo?
Usando las herramientas de prueba de TestCase estándar, 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?

 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 pasa:

 test_logging (__main__.Test) ... ok 

pero % test.py Test.test_logging2 no:

 test_logging2 (__main__.Test) ... ERROR 

ya que el estado interno de logging ha sido restablecido.

Esto reimportará el módulo como nuevo para ti:

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