Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.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_Testing_Python Unittest - Fatal编程技术网

定义仅在Python中测试的变量

定义仅在Python中测试的变量,python,testing,python-unittest,Python,Testing,Python Unittest,这可能是一个相对简单的问题,但我很难找到另一个答案 我正在从事一个小型Python项目,我希望以测试驱动的方式完成这项工作。在用户主目录中定义的文件夹中的文件操作对程序非常重要,但我希望这些操作在单独的临时文件夹中进行,以便进行测试 如果我的应用程序意识到它是作为测试环境的一部分运行的,是否有一种方法可以在我的应用程序中设置一个不同的变量?我目前的解决方法(def some_函数(self,test=False)或包含大量的@patch装饰程序)不是很优雅 我在想一些大致如下的事情: def r

这可能是一个相对简单的问题,但我很难找到另一个答案

我正在从事一个小型Python项目,我希望以测试驱动的方式完成这项工作。在用户主目录中定义的文件夹中的文件操作对程序非常重要,但我希望这些操作在单独的临时文件夹中进行,以便进行测试

如果我的应用程序意识到它是作为测试环境的一部分运行的,是否有一种方法可以在我的应用程序中设置一个不同的变量?我目前的解决方法(
def some_函数(self,test=False)
或包含大量的
@patch
装饰程序)不是很优雅

我在想一些大致如下的事情:

def return_home_folder():
    if testing:
        home = os.getcwd() + '/testrun'
    else:
        home = os.path.expanduser('~')
    returnvalue = home + '/appname/'
    return returnvalue

在测试和生产中,让一个函数有不同的行为不是一个好主意。测试的全部目的是预测程序在生产中的行为,而改变行为会有点失败

(单元测试不同于“干运行”,但这是一个单独的问题。)

我会选择这样的方式:

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")

单元测试本身并没有太多的指导意义,但它们展示了如何解决“测试模式”的需求。

您可以在环境变量中定义您的环境:

$ 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')
然后,在任何地方(测试和应用程序代码),您都可以使用
设置。HOME\u DIR

import os
from my_app import settings

file_path = os.path.join(settings.HOME_DIR, 'filename')

...
希望这对你有用,或者让你走上正轨