如何使用unittests作为可执行入口点分发python包?

时间:2015-02-19 22:28:54

标签: python package pip setuptools

我正在编写一个python包,其中包含注册到'setup.py'中的可执行脚本作为入口点。当安装包时,放置它们 到没有“.py”扩展名的python包安装的“bin”目录。我希望能够运行包的单元测试 安装包后也可以作为可执行文件。单元测试位于setup.py的“entry_points”中的“test_package.py”中: 运行python包

setup(
  entry_points={
      'console_scripts': [
          'my_exec = mypackage.my_exec:main'
          'test_package = mypackage.test_package.main'],
  }
)

test_package.py脚本从“test-files”中读取一些文件:

mypackage/
  setup.py
  mypackage/
    my_exec.py
    test_package.py
    # files needed to run tests
    test-files/
    # directory containing files written by 'test_package'
    test-results/

当我在里面运行“test_package.py”时,它运行正常。但是当我安装它并且“test_package”在“bin”中创建为可执行文件时,则运行:

$ test_package

从命令行找不到测试。它说“跑0测试”。这个目录结构有什么问题?什么是以某种方式分发单元测试的正确方法 他们可以从命令行运行,即使他们创建文件?如果为使用sudo权限的人安装了软件包,那么我希望无sudo的用户能够运行这些软件而无需对安装软件包的位置进行写访问。

test_package.py的结构是:

class TestPackage(unittest.Test):
  def setUp():
     ...
  def test_foo():
     # read stuff from 'test-files/'
     # ...
     # output stuff to 'test-results/'
     # ...

def main():
    unittest.main()


if __name__ == '__main__':
    main()

1 个答案:

答案 0 :(得分:0)

默认情况下unittest.main尝试在__main__模块中查找测试。因为您尝试从入口点运行测试,所以模块不再是__main__

如果您尝试将module参数传递给unittest.main mypackage.test_package函数,可能会有效。

有关详细信息,请参阅unittest.main的文档: