python: 为单元测试设置不同的配置文件
python: setup different config files for unit testing
我正在使用 python 进行个人项目。目前我正在使用 nose 进行单元测试,并且有一个 python 文件用于存储所有设置,如文件路径、数据库配置等。
因为应用程序会连接到数据库,所以我希望在进行单元测试时,应用程序使用的数据库和文件 reads/writes 不是存储所有真实数据的文件。
我认为我可以做的一个好方法是设置几个阶段,但是因为我使用的是纯 python 而没有使用 Django 等任何框架,所以我不确定该怎么做。
我也可以写一个简单的脚本之类的东西在运行单元tests/real工作之前在不同的配置文件之间切换,但我认为这种方式不如设置不同的阶段。
您可以通过此处的不同途径来帮助实现您的目标。
首先,我强烈建议您查看这两个模块。我一直使用这些进行单元测试。
如果你真的想针对数据库进行测试,你可以使用上下文管理器来设置一个临时数据库来进行你的测试,一旦完成它就会自行销毁。有关上下文管理器的信息,请先查看以下内容:
使用模拟,在这种情况下,您可以做的只是模拟您最初导入设置的位置,并使用单元测试版本进行设置。
或者,您也可以查看 fixtures,这将帮助您预先设置一些数据对象,您可以进行相应的测试:Fixtures
将上下文切换到测试上下文的一种有效方法是将配置存储在文件中,以便可以使用 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
我正在使用 python 进行个人项目。目前我正在使用 nose 进行单元测试,并且有一个 python 文件用于存储所有设置,如文件路径、数据库配置等。
因为应用程序会连接到数据库,所以我希望在进行单元测试时,应用程序使用的数据库和文件 reads/writes 不是存储所有真实数据的文件。
我认为我可以做的一个好方法是设置几个阶段,但是因为我使用的是纯 python 而没有使用 Django 等任何框架,所以我不确定该怎么做。
我也可以写一个简单的脚本之类的东西在运行单元tests/real工作之前在不同的配置文件之间切换,但我认为这种方式不如设置不同的阶段。
您可以通过此处的不同途径来帮助实现您的目标。
首先,我强烈建议您查看这两个模块。我一直使用这些进行单元测试。
如果你真的想针对数据库进行测试,你可以使用上下文管理器来设置一个临时数据库来进行你的测试,一旦完成它就会自行销毁。有关上下文管理器的信息,请先查看以下内容:
使用模拟,在这种情况下,您可以做的只是模拟您最初导入设置的位置,并使用单元测试版本进行设置。
或者,您也可以查看 fixtures,这将帮助您预先设置一些数据对象,您可以进行相应的测试:Fixtures
将上下文切换到测试上下文的一种有效方法是将配置存储在文件中,以便可以使用 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