2015-12-21 50 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