我正在编写一个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()
答案 0 :(得分:0)
默认情况下unittest.main
尝试在__main__
模块中查找测试。因为您尝试从入口点运行测试,所以模块不再是__main__
。
如果您尝试将module
参数传递给unittest.main
mypackage.test_package
函数,可能会有效。
有关详细信息,请参阅unittest.main
的文档: