首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >针对已安装的软件包运行unittest

针对已安装的软件包运行unittest
EN

Stack Overflow用户
提问于 2021-03-16 08:52:47
回答 1查看 534关注 0票数 2

我目前正在从事一个项目,其结构是:

代码语言:javascript
运行
复制
my_package
│   README.md
|   setup.py
│
└───my_package
|   |   __init__.py
│   │   file1.py
│   │   file2.py
|   |   ...
│   └───subpackage
│       │   sub1.py
│       │   ...
│   
└───test
    |   __init__.py
    │   test_file1.py
    |   test_file2.py

我可以用python -m unittest discover -s test运行我的所有测试。大多数test_x.py文件都包含导入(如from my_package.file1 import Something )。因此,unittest命令将针对my_package中包含的源代码运行我的所有测试。

另一方面,我从这个包创建了一个私有Pypi包。在我的CI中,我想对安装的文件而不是本地源代码运行我的单元测试。

然后,import my_package.file1; print(my_package.file1.__file__)应该显示到site-packages的路径。

是否有办法这样做?

编辑:我想将我的测试文件夹与my_package文件夹分开,因为我不打算分发我的测试。

EN

回答 1

Stack Overflow用户

发布于 2021-03-16 09:14:46

要运行“发现”--对已安装的包进行测试,下一步是:

在包的目录./test/中添加具有以下内容的文件run.py

在网上试试!

代码语言:javascript
运行
复制
import os, unittest

def load_tests(loader, standard_tests, pattern):
    this_dir = os.path.dirname(__file__)
    pattern = pattern or "test_*.py"
    top_level_dir = os.path.dirname(os.path.dirname(this_dir))
    package_tests = loader.discover(
        start_dir = this_dir, pattern = pattern, top_level_dir = top_level_dir,
    )
    standard_tests.addTests(package_tests)
    return standard_tests

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

那么,运行测试将和python -m your_package.test.run一样容易。

如果您想要将run.py放在根目录中,那么只需将this_dir = os.path.dirname(__file__)替换为this_dir = os.path.dirname(__file__) + '/test/'即可。然后通过python -m your_package.run运行测试。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66651858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档