2015-12-21 51 views
1

我很困惑如何構建一個包含一個包和unittest的項目。項目目錄結構,以便我可以導入包unittest

我有這樣的目錄結構:

TestProject/ 
├── package 
│   ├── constants.py 
│   ├── __init__.py 
│   ├── package.py 
│   └── tests 
│    └── test_package.py 
└── usage.py 

constants.py

A = 1 

__init__.py

from .package import give_A 

package.py

from .constants import * 

def give_A(): 
    return A 

usage.py

from package import give_A 

print(give_A()) 

test_package.py

import unittest 
from package import give_A 

class Test_package(unittest.TestCase): 
    def test_simple(self): 
     self.assertEqual(give_A(), 1) 

if __name__ == '__main__': 
    unittest.main() 

一切正常,直到我嘗試運行test_package.py模塊,它可以理解不能導入包:

~/Python/TestProject/package/tests $ python3 test_package.py 
Traceback (most recent call last): 
    File "test_package.py", line 3, in <module> 
    from package import give_A 
ImportError: No module named 'package' 

但是,這似乎是封裝/測試的首選結構。我怎樣才能使它工作?或者我應該完全不同(結構,目錄,導入,測試執行...)?

+0

嘗試'從package.package import give_A'? – Holloway

+0

'ImportError:沒有名爲package.package'的模塊。沒有理由說它應該工作,因爲包不在PYTHONPATH中,對嗎? – Fenikso

+0

你想從哪裏運行腳本? – Holloway

回答

0

或者:

  1. 設置你的PYTHONPATH這樣TestProject是它。使用單元測試這樣

  2. 運行測試:

    ~/Python/TestProject $ python3 -m package.tests.test_package

  3. 使用單元測試commendline接口:

    ~/Python/TestProject $ python3 -m unittest package/tests/test_package.py

欲瞭解更多信息,請參閱:https://docs.python.org/3/library/unittest.html#command-line-interface

+0

我得到'SystemError:父模塊' '未加載,不能執行相對導入',如果我嘗試相對導入。添加到'PYTHONPATH'的作品,但這是常見的做法? – Fenikso

+0

請參閱http://stackoverflow.com/questions/16981921/relative-imports-in-python-3或者設置PYTHONPATH,或者您需要使用python -m package.tests.test_package運行。 – Bernhard

+0

這有效。人們期望像那樣運行測試嗎?還是有人包含shell腳本來運行測試? – Fenikso