如何将 Python 单元测试指定为具有数据库依赖性?
How to designate Python unit tests as having database dependency?
我正在开发一个项目,其中有许多 "unit tests" 具有需要与数据库和其他 API 交互的硬依赖项。这些测试对我们的团队来说是宝贵且有用的资源,但它们不能 运行 独立,而不依赖于测试环境中其他服务的功能。我个人会称之为 "functional tests",但这只是我们团队中已经建立的语义。
问题是,既然我们开始在我们的代码中引入更多的纯单元测试,我们就会有一堆有或没有外部依赖性的测试。这些测试可以 运行 在签出代码后立即进行,无需安装或配置其他工具。他们也可以在像jenkins这样的持续集成环境中运行
所以我的问题是,如何表示哪个是更清晰的分离?单元测试库中是否存在装饰器?
您可以使用 skipIf
装饰器定义应该跳过哪个测试。结合设置环境变量,您可以跳过某些环境中的测试。一个例子:
from unittest import skipIf
class MyTest(Testcase):
@skipIf(os.environ.get('RUNON') == 'jenkins', 'Does not run in Jenkins')
def test_my_code(self):
...
这是另一种选择。您可以按目录分隔不同的测试类别。如果你想尝试这个策略,它可能看起来像:
python
-modules
unit
-pure unit test modules
functional
-other unit test modules
在您的测试管道中,您可以调用您的测试框架来仅执行所需的测试。例如,对于 Python 的 unittest
,您可以从 python 目录 中 运行 您的 'pure unit tests'
python -m unittest discover --start-directory ../unit
和 functional/other 单元测试
python -m unittest discover --start-directory ../functional
此设置的一个优点是您的测试很容易分类,并且您可以在每个测试环境中执行您需要的任何脚手架或模拟服务。有更多 Python 经验的人也可以帮助您 运行 测试,而不管当前目录如何。
我正在开发一个项目,其中有许多 "unit tests" 具有需要与数据库和其他 API 交互的硬依赖项。这些测试对我们的团队来说是宝贵且有用的资源,但它们不能 运行 独立,而不依赖于测试环境中其他服务的功能。我个人会称之为 "functional tests",但这只是我们团队中已经建立的语义。
问题是,既然我们开始在我们的代码中引入更多的纯单元测试,我们就会有一堆有或没有外部依赖性的测试。这些测试可以 运行 在签出代码后立即进行,无需安装或配置其他工具。他们也可以在像jenkins这样的持续集成环境中运行
所以我的问题是,如何表示哪个是更清晰的分离?单元测试库中是否存在装饰器?
您可以使用 skipIf
装饰器定义应该跳过哪个测试。结合设置环境变量,您可以跳过某些环境中的测试。一个例子:
from unittest import skipIf
class MyTest(Testcase):
@skipIf(os.environ.get('RUNON') == 'jenkins', 'Does not run in Jenkins')
def test_my_code(self):
...
这是另一种选择。您可以按目录分隔不同的测试类别。如果你想尝试这个策略,它可能看起来像:
python
-modules
unit
-pure unit test modules
functional
-other unit test modules
在您的测试管道中,您可以调用您的测试框架来仅执行所需的测试。例如,对于 Python 的 unittest
,您可以从 python 目录 中 运行 您的 'pure unit tests'
python -m unittest discover --start-directory ../unit
和 functional/other 单元测试
python -m unittest discover --start-directory ../functional
此设置的一个优点是您的测试很容易分类,并且您可以在每个测试环境中执行您需要的任何脚手架或模拟服务。有更多 Python 经验的人也可以帮助您 运行 测试,而不管当前目录如何。