【问题标题】:Proper module organisation for testing用于测试的适当模块组织
【发布时间】:2018-04-16 21:42:51
【问题描述】:

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

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/? 导入?

【问题讨论】:

    标签: python python-3.x


    【解决方案1】:

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

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

    然后你可以从项目中发现测试/

    【讨论】:

      【解决方案2】:

      您应该使用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

      【讨论】:

        【解决方案3】:

        'unittest discover' 目前无法递归扫描测试类。 Python 3.4 中添加了一个补丁 issue17457,它部分修复了这个问题,因此当您明确指定命名空间包作为发现目标时,发现工作有效。即当你跑步时 'python3 -m unittest discover -s test/core'

        但它不会递归到 namespace_pkg 内的任何命名空间包。所以当你跑 'python3 -m unittest discover -s test/' 它不在 cwd 中的所有命名空间包(基本上是文件夹)下。

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

        所以基本上,现在,如果您需要使用一个命令运行所有测试,则必须将所有测试放在一个文件夹中

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-13
          • 2022-06-18
          • 2019-02-06
          • 1970-01-01
          • 1970-01-01
          • 2014-12-31
          • 1970-01-01
          • 2012-04-25
          相关资源
          最近更新 更多