【发布时间】:2021-02-11 16:01:06
【问题描述】:
我编写了一些 Python,并将其作为自定义包进行分发。我在开发时针对源代码运行了一些测试,但我也希望安装包的用户能够针对分布式包运行相同的测试。
我的包遵循这个结构:
my_package
├── MyPackage
│ ├── __init__.py
│ └── my_module.py
├── setup.py
└── tests
└── test_my_package.py
my_package.py 是
def my_function():
print("here!")
return True
而test_my_package.py 是:
import unittest
import sys
sys.path.insert(0, "../")
from MyPackage.my_module import my_function
class TestMyModule(unittest.TestCase):
def test_somehting(self):
self.assertTrue(my_function())
当我在操作sys.path 时,我总是针对开发代码运行测试。有没有办法使用 stuptools,这样我就可以针对开发代码运行测试,但用户针对已安装的包运行?
谢谢!
【问题讨论】:
-
tox之类的工具(可能与pytest结合使用)应该对此有所帮助。我还建议使用所谓的 src-layout. -
@sinoroc,'src-layout' 是什么意思?
-
如果我是你,我会在你的测试中删除
sys.path操作。你为什么需要那些?你可能需要一个更好的测试运行器。我认为如果你只使用 pytest 它会让事情变得更容易。 -
您是否还使用可编辑安装来测试当前源代码而不是已安装的代码?
python -m pip install --editable .
标签: pytest setuptools python-unittest python-packaging tox