2

我正在开发一个项目,该项目有很多“单元测试”,它们都需要与数据库和其他API进行交互。这些测试对我们的团队来说是一种宝贵而有用的资源,但它们不能独立运行,而不依赖测试环境中其他服务的功能。我个人称之为“功能测试”,但这只是我们团队内已经建立的语义。如何将Python单元测试指定为具有数据库依赖性?

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

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

+0

你的测试是类,对不对?那么如何使用继承来分类你的测试呢?继承基本上是“A *是a * B”。 Django会这样做,以区分需要不同级别的数据库访问的测试。 – spectras

+0

标记它们很简单 - 只需在课堂上添加一个标记即可。然而,最好的依赖于你的测试流水线。你如何执行测试?你有一套TestSuites,一个自定义选择程序,简单的'setup.py',...? – MisterMiyagi

回答

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

这是另一种选择。您可以通过目录分隔不同的测试类别。如果你想尝试这种策略,它可能看起来像:

python -modules unit -pure unit test modules functional -other unit test modules

在您的测试管道,你可以打电话给你测试框架仅执行所需的测试。例如,对于Python的unittest,你可以运行从Python目录内的 '纯单元测试'

python -m unittest discover --start-directory ../unit

python -m unittest discover --start-directory ../functional

功能/其他单元测试此设置的一个优点是您的测试可以轻松分类,并且您可以在每个测试环境中执行任何脚手架或模拟的服务。有更多的Python经验的人可以帮助您运行测试,无论当前目录如何。

相关问题