我在将我的项目文件夹中的Python模块导入tests文件夹时遇到问题。当然,我错过了一些东西,但是在阅读了很多其他答案后,我仍然无法让它发挥作用。
文件夹结构如下:
/CorpusBuilder
/corpusBuilder
__init__.py
corpus.py # contains Corpus class
/tests
__init__.py
test_corpus.py # trying to import Corpus class — but fails
每个__init__.py
文件的内容到底应该是什么? [顶级文件夹(CorpusBuilder
)是否也需要__init__.py
文件?] import
中的test_corpus.py
语句应该说什么?
很抱歉这么多问题:我想我只需要一个明确的例子。
答案 0 :(得分:0)
没有必要在__init__.py
个文件中添加任何内容。假设你从基地" CorpusBuilder"运行你的测试。目录,或以其他方式将该目录放到PYTHONPATH上,您的test_corpus文件可以简单地说from corpusBuilder.corpus import Corpus
。
答案 1 :(得分:0)
在我的方法中(根据http://www.scotttorborg.com/python-packaging/index.html),测试不在顶层。并且不需要那里的init文件。 (假设您的模块名称应为corpusBuilder)。你需要的是一个setup.py(再次:http://www.scotttorborg.com/python-packaging/minimal.html和https://docs.python.org/2/distutils/setupscript.html),如果你想运行测试:
$ python setup.py test
所以你的结构应该是:
CorpusBuilder/
corpusBuilder/
corpus.py
__init__.py
tests/
__init__.py
test_corpus.py
setup.py
...
在corpusBuilder的init中,您可以定义子模块的导入。这对于不污染您的命名空间很有用。例如:
from .submodule import foo
否则,这只是一个空白文件。
中的init文件
tests/
根本不需要任何东西,在test_corpus中你需要导入你的模块。例如:
from unittest import TestCase
import corpusBuilder
class TestOne(TestCase):
def test_ist_string(self):
s = minimal.test()
self.assertTrue(isinstance(s, basestring))
您现在应该可以运行测试了。