2011-09-18 8 views
6

Nhiều mô-đun Python bảo toàn trạng thái nội bộ mà không cần xác định các lớp, ví dụ: logging duy trì một số trình ghi nhật ký có thể truy cập qua getLogger().nhập lại mô-đun-dưới-kiểm tra để mất ngữ cảnh

Bạn kiểm tra mô-đun như thế nào?
Sử dụng các công cụ chuẩn unittest, tôi muốn các thử nghiệm khác nhau bên trong lớp TestCase để nhập lại mô-đun thử nghiệm của mình để mỗi lần mất ngữ cảnh. Điều này có thể được thực hiện?

Trả lời

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 đèo:

test_logging (__main__.Test) ... ok 

nhưng % test.py Test.test_logging2 không:

test_logging2 (__main__.Test) ... ERROR 

vì trạng thái bên trong của logging đã được đặt lại.

3

này sẽ tái nhập khẩu các mô-đun như mới cho bạn:

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

tôi nghĩ bạn có nghĩa là 'del sys.modules ['my_module']' –

+0

Yup - hoàn toàn đúng. Tôi sẽ chỉnh sửa câu trả lời. –