【问题标题】:python: setup different config files for unit testingpython:为单元测试设置不同的配置文件
【发布时间】:2015-12-17 02:29:37
【问题描述】:

我正在使用 python 进行个人项目。目前我正在使用nose进行单元测试,并且有一个python文件用于存储所有设置,如文件路径、数据库配置等。

因为应用程序会连接到数据库,所以我希望在进行单元测试时,使用的数据库和应用程序读取/写入的文件不是存储所有真实数据的文件。

我认为我可以做的一个好方法是设置几个阶段,但是因为我使用的是纯 python 而没有使用任何像 Django 这样的框架,所以我不知道该怎么做。

我也可以在运行单元测试/实际工作之前编写一个简单的脚本或类似的东西来在不同的配置文件之间切换,但我认为这种方式不如设置不同的阶段。

【问题讨论】:

  • 您的标题有点误导。您可能应该将其设置为“使用不同的配置进行单元测试”。此外,使用一些实际示例重新格式化您的文本块将有助于更容易理解您要查找的内容。

标签: python unit-testing configuration config


【解决方案1】:

您可以通过多种途径来帮助实现您的目标。

首先,我强烈建议查看这两个模块。我一直使用这些来进行单元测试。

Mock & flexmock

如果您真的想针对数据库进行测试,您可以使用上下文管理器来设置一个临时数据库来执行您的测试,一旦完成,它将自行销毁。有关上下文管理器的信息,请先查看以下内容:

Stackoverflow - with

使用模拟,在这种情况下,您可以做的只是模拟您最初导入设置的位置并使用您的单元测试版本进行设置。

另外,您还可以查看fixtures,这将有助于为您预先设置一些数据对象,您可以进行相应的测试:Fixtures

【讨论】:

    【解决方案2】:

    将上下文切换到测试上下文的一种工作方法是将配置存储在文件中,以便可以使用ConfigArgParse 访问它们。当您在生产模式下启动代码时,您可以使用默认配置文件位置,除非使用环境变量重新定义默认位置:

    import configargparse
    import os 
    config_location = os.getenv("MY_PROJECT_CONFIG_LOCATION", default="configs/production.yaml")
    parser = configargparse.ArgParser(default_config_files=[config_location], ignore_unknown_config_file_keys=True)
    

    当您在测试模式下启动代码时,您可以使用系统环境变量重新定义默认配置文件位置:

    class SomeTestCase(unittest.TestCase):
        def someTestMethod(self):
            os.environ['MY_PROJECT_CONFIG_LOCATION'] = 'configs/test.yaml'
            #any test code here
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 2010-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2020-04-28
      相关资源
      最近更新 更多