如何在测试中导入测试模块?

迈克尔

我是 Python 新手,来自 Java 背景。

假设我正在开发一个带有 package 的 Python 项目hello

hello_python/
  hello/
    hello.py
    __init__.py
  test/
    test_hello1.py
    test_hello2.py

我相信项目结构是正确的。

假设hello.py包含do_hello()我想在测试中使用的函数如何导入do_hello测试test_hello1.pytest_hello2.py

永比尔特

你这里有两个小问题。首先,您从错误的目录运行测试命令,其次您还没有完全正确地构建您的项目。

通常,当我开发一个 python 项目时,我会尽量将所有内容都集中在项目的根目录周围,这就是hello_python/您的情况。默认情况下,Python 在其加载路径上具有当前工作目录,因此如果您有这样的项目:

hello_python/
  hello/
    hello.py
    __init__.py
  test/
    test_hello1.py
    test_hello2.py


# hello/hello.py
def do_hello():
    return 'hello'

# test/test_hello.py
import unittest2
from hello.hello import do_hello

class HelloTest(unittest2.TestCase):
    def test_hello(self):
        self.assertEqual(do_hello(), 'hello')

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

其次,test现在不是模块,因为您错过了__init__.py该目录中的 。您应该有一个如下所示的层次结构:

hello_python/
  hello/
    hello.py
    __init__.py
  test/
    __init__.py    #  <= This is what you were missing
    test_hello1.py
    test_hello2.py

当我在我的机器上尝试时,运行python -m unittest test.hello_test对我来说很好。

你可能会发现这还是有点麻烦。我强烈建议安装nose,它可以让您nosetests从项目的根目录中简单地调用以自动查找和执行所有测试——前提是您拥有带有__init__.pys 的正确模块

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章