仅在 Python 中定义用于测试的变量
Define variable for testing only in Python
这可能是一个相对简单的问题,但我很难找到其他答案。
我正在做一个小的 Python 项目,我想以测试驱动的方式进行。用户主目录中定义的文件夹中的文件操作对于程序来说非常重要,但我希望这些操作发生在单独的临时文件夹中以进行测试。
有没有办法在我的应用程序中设置一个变量,如果该应用程序意识到它是 运行 作为测试环境的一部分,该变量会有所不同?我目前的解决方法(def some_function(self, test=False)
或包括很多 @patch
装饰器)不是很优雅...
我正在考虑以下内容:
def return_home_folder():
if testing:
home = os.getcwd() + '/testrun'
else:
home = os.path.expanduser('~')
returnvalue = home + '/appname/'
return returnvalue
恕我直言,让函数在测试和生产中表现不同并不是一个好主意。测试的全部意义在于预测程序在生产中的行为,而改变行为有点失败。
(单元测试不同于 "dry run",但这是一个单独的问题。)
我会选择这样的东西:
def get_app_folder():
return os.path.join(os.path.expanduser("~"), "appname")
def test_get_app_folder():
assert get_app_folder().startswith(os.path.expanduser("~"))
assert get_app_folder().endswith("appname")
单元测试本身并没有太大的指导意义,但它们展示了如何解决对 "testing mode" 的需求。
您可以在环境变量中定义您的环境:
$ export MY_APP_ENVIRONMENT=test
在 settings.py
模块中阅读:
import os
ENVIRONMENT = os.environ['MY_APP_ENVIRONMENT']
_base_dir_map = {
'test': os.path.join(os.getcwd(), 'testrun'),
'prod': os.path.expanduser('~'),
}
HOME_DIR = os.path.join(_base_dir_map[ENVIRONMENT], 'appname')
然后,在所有地方(测试和应用程序代码),您将使用 settings.HOME_DIR
:
import os
from my_app import settings
file_path = os.path.join(settings.HOME_DIR, 'filename')
...
希望这对你有用,或者让你走上正轨。
这可能是一个相对简单的问题,但我很难找到其他答案。
我正在做一个小的 Python 项目,我想以测试驱动的方式进行。用户主目录中定义的文件夹中的文件操作对于程序来说非常重要,但我希望这些操作发生在单独的临时文件夹中以进行测试。
有没有办法在我的应用程序中设置一个变量,如果该应用程序意识到它是 运行 作为测试环境的一部分,该变量会有所不同?我目前的解决方法(def some_function(self, test=False)
或包括很多 @patch
装饰器)不是很优雅...
我正在考虑以下内容:
def return_home_folder():
if testing:
home = os.getcwd() + '/testrun'
else:
home = os.path.expanduser('~')
returnvalue = home + '/appname/'
return returnvalue
恕我直言,让函数在测试和生产中表现不同并不是一个好主意。测试的全部意义在于预测程序在生产中的行为,而改变行为有点失败。
(单元测试不同于 "dry run",但这是一个单独的问题。)
我会选择这样的东西:
def get_app_folder():
return os.path.join(os.path.expanduser("~"), "appname")
def test_get_app_folder():
assert get_app_folder().startswith(os.path.expanduser("~"))
assert get_app_folder().endswith("appname")
单元测试本身并没有太大的指导意义,但它们展示了如何解决对 "testing mode" 的需求。
您可以在环境变量中定义您的环境:
$ export MY_APP_ENVIRONMENT=test
在 settings.py
模块中阅读:
import os
ENVIRONMENT = os.environ['MY_APP_ENVIRONMENT']
_base_dir_map = {
'test': os.path.join(os.getcwd(), 'testrun'),
'prod': os.path.expanduser('~'),
}
HOME_DIR = os.path.join(_base_dir_map[ENVIRONMENT], 'appname')
然后,在所有地方(测试和应用程序代码),您将使用 settings.HOME_DIR
:
import os
from my_app import settings
file_path = os.path.join(settings.HOME_DIR, 'filename')
...
希望这对你有用,或者让你走上正轨。