我目前正在从事一个项目,其结构是:
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文件夹分开,因为我不打算分发我的测试。
发布于 2021-03-16 09:14:46
要运行“发现”--对已安装的包进行测试,下一步是:
在包的目录./test/中添加具有以下内容的文件run.py:
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运行测试。
https://stackoverflow.com/questions/66651858
复制相似问题