如何将Python单元测试指定为具有数据库依赖性?

时间:2016-08-24 15:38:47

标签: python unit-testing continuous-integration functional-testing

我正在开展一个有很多单元测试的项目"具有需要与数据库和其他API交互的硬依赖项。这些测试对我们的团队来说是一个宝贵且有用的资源,但它们不能独立运行,而不依赖于测试环境中其他服务的功能。我个人称之为"功能测试",但这只是我们团队中已经建立的语义。

问题是,现在我们开始在代码中引入更多纯单元测试,我们有一大堆测试,它们有或没有外部依赖。这些测试可以在签出代码后立即运行,无需安装或配置其他工具。它们也可以在像詹金斯这样的持续集成环境中运行。

所以我的问题是,我怎么能表明哪一个更清洁分离?单元测试库中是否有现成的装饰器?

2 个答案:

答案 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经验的人也可以帮助您运行测试,无论当前目录如何。