Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python:为单元测试设置不同的配置文件_Python_Unit Testing_Configuration_Config - Fatal编程技术网

python:为单元测试设置不同的配置文件

python:为单元测试设置不同的配置文件,python,unit-testing,configuration,config,Python,Unit Testing,Configuration,Config,我正在使用python进行一个个人项目。目前我正在使用nose进行单元测试,有一个python文件用于存储所有设置,如文件路径、db配置等 因为应用程序将连接到数据库,所以我希望在进行单元测试时,使用的数据库和应用程序读取/写入的文件不是存储所有真实数据的数据库和文件 我认为我可以做的一个好方法是设置几个阶段,但因为我使用的是纯python,而没有使用任何类似Django的框架,所以我不确定如何做到这一点 在运行单元测试/实际工作之前,我还可以编写一个简单的脚本或类似的东西来在不同的配置文件之间

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

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

我认为我可以做的一个好方法是设置几个阶段,但因为我使用的是纯python,而没有使用任何类似Django的框架,所以我不确定如何做到这一点


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

在这里,你可以通过不同的途径来帮助实现你想要的目标

首先,我强烈建议大家看看这两个模块。我一直在使用这些工具进行单元测试

&

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

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


或者,您也可以查看fixture,这将有助于为您预先设置一些数据对象,并且您可以相应地进行测试:

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

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

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