2013-03-12 31 views
5

Tôi có một câu hỏi rất cơ bản về Python và unittest.Làm thế nào để nhập khẩu một lớp từ unittest trong python?

Tôi có cấu trúc thư mục như thế này.

Project 
    | 
    |-lib 
     | 
     |-__init__.py 
     |-class.py 
    | 
    |-tests 
     | 
     |-__init__.py 
     |-test_class.py 

Bây giờ đây là nội dung của tôi về test_class.py. Nếu tôi nhập khẩu lib.class từ thư mục gốc nó làm việc tốt. Nhưng nếu tôi nhập tập tin từ một nơi khác thì nó không hoạt động.

 

import unittest 
from lib.class import Class 

class TestClass(unittest.TestCase): 
    def testClass(self): 
      // do some test 

def main(): 
    unittest.main() 

if __name__ == '__main__': 
    main() 
 

Khi tôi chạy thử nghiệm tôi đã nhận lỗi này

 

Traceback (most recent call last): 
    File "tests/test_class.py", line 2, in 
    from lib.class import Class 
ImportError: No module named lib.class 

 

Không chắc làm cách nào để nhập khẩu các tập tin từ một thư mục khác mà không phải là thư mục gốc.

Trả lời

1

Sửa sys.path để bao gồm các thư mục dự án

import sys 
sys.path.append('/path/to/Project') 

Trên Linux, bạn có thể làm

import sys, os 
sys.path.append(os.path.abspath(sys.path[0]) + '/../') 

và nên bao gồm các thư mục phía trên chạy kịch bản thử nghiệm Python, đó là thư mục dự án

8

Tôi không nghĩ đây là cách hiệu quả nhất hoặc an toàn để xử lý việc này, nhưng đây là cách tôi thêm các thư viện vàocủa tôi.

Điều này về cơ bản sẽ thêm thư mục trước vào danh sách tài nguyên có thể truy cập và sau đó sử dụng thư mục đó để bao gồm thư mục chính lib.

Alternativly bạn có thể sẽ làm điều gì đó như import .. from lib.class. Hãy xem here để biết thêm thông tin về nhập khẩu tương đối.

Các vấn đề liên quan