【问题标题】:Running tests against source code or the package针对源代码或包运行测试
【发布时间】: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,这样我就可以针对开发代码运行测试,但用户针对已安装的包运行?

谢谢!

【问题讨论】:

标签: pytest setuptools python-unittest python-packaging tox


【解决方案1】:

当您说“我在开发时针对源代码运行的测试”时存在误解。

您始终应该针对打包的代码运行测试,因为您希望确保您的用户将运行的打包代码能够正常工作。

您可以使用tox 运行您的测试,它会自动从您的源代码创建一个包,甚至可以针对不同的 Python 版本运行测试,例如当前支持的 Python 3.6、3.7 和 3.8。

虽然这非常罕见,但您的用户也可以运行测试。

【讨论】:

  • 两者都可以,不是吗?我的意思是,每次运行测试时都必须安装软件包非常不方便,因为我使用的是 TDD,所以我每分钟运行一次测试。我认为可编辑给了我想要的东西。
  • 是的,你可以,应该两者都做。将您的项目安装为可编辑的,定期运行您的测试。并且在关键步骤(例如在 git 提交之前)在实际安装的(不可编辑的)项目上运行测试(tox 可以很好地做到这一点)。是的,用户运行项目测试的情况很少见,我的妥协是我将测试分布在 sdist 而不是 wheel 中。
猜你喜欢
  • 2019-03-02
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 1970-01-01
  • 1970-01-01
  • 2010-11-20
相关资源
最近更新 更多