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