适当的模块组织进行测试

时间:2018-04-16 21:42:51

标签: python python-3.x

我有一个目前看起来像这样的项目:

src/
    proc.py
    adapter.py
    etc.
test/
    core/test_proc.py
    adapters/test_adapter.py

我想在test /下运行所有​​测试,其中大部分从src导入一些模块。为此,我已将src /添加到我的PYTHONPATH中,但是使用'python3 -m unittest discover -s test /'给出一个无法导入名称'Proc'(来自proc.py),尽管'python3 -m unittest discover -s test / core /'工作正常

这是我应该做的事情(如果是这样,出了什么问题)或是否有更好/更明智的方式来组织我的源和测试,以便我可以轻松地在顶层运行我的所有测试,他们他们自己可以从src /?

导入

3 个答案:

答案 0 :(得分:0)

您需要将 init .py文件添加到目录/子目录。

project/
        src/
            proc.py
            adapter.py
            __init__.py
        test/
            core/
                 test_proc.py
                 __init__.py
            adapters/
                 test_adapter.py
                 __init__.py

然后你可以从project /

发现测试

答案 1 :(得分:0)

您应该使用relative imports。为此,您应该将项目封装到一个目录中,如下所示:

src/
    __init__.py
    app/
        __init__.py
        proc.py
        adapter.py
        etc.
    test/
        __init__.py
        core/
            __init__.py
            test_proc.py
        adapters/
            __init__.py
            test_adapter.py

然后,在test_proc.py内,您可以使用from ...app.proc import something

答案 2 :(得分:0)

到目前为止,“ unittest discover”无法递归扫描测试类。在Python 3.4中添加了补丁issue17457,此补丁已部分修复了该问题,因此当您将命名空间包显式指定为发现目标时,发现才起作用。即当您跑步时 “ python3 -m unittest发现-s测试/核心”

但是它不会递归到namespace_pkg内的任何命名空间包中。所以当你跑步 'python3 -m unittest discover -s test /'并未在cwd中的所有名称空间包(主要是文件夹)下出现。

一些PR正在进行中(例如:issue35617),以便对发现路径下的所有目录进行递归扫描,但尚未发布

所以基本上,到目前为止,如果需要使用一个命令运行所有测试,则必须将所有测试放在一个文件夹中。