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_Pytest_Python Click - Fatal编程技术网

如何在Python中对需要活动单击上下文的函数进行单元测试

如何在Python中对需要活动单击上下文的函数进行单元测试,python,unit-testing,pytest,python-click,Python,Unit Testing,Pytest,Python Click,我正在开发一个命令行shell,并尝试测试一些解析命令参数的函数 parser.py: 导入shlex 导入点击 def process_cmd(参数,称为_self=False): 结果=args #替换别名 如果不称为_self: 别名=单击.get_current_context().obj.config['alias'] 如果结果[0]为别名: 替换=进程\命令(拆分\参数(别名[结果[0]]),真) 如果len(结果)==1: 结果=替换 其他: 结果=替换+结果[1:] 返回结果 d

我正在开发一个命令行shell,并尝试测试一些解析命令参数的函数

parser.py:
导入shlex
导入点击
def process_cmd(参数,称为_self=False):
结果=args
#替换别名
如果不称为_self:
别名=单击.get_current_context().obj.config['alias']
如果结果[0]为别名:
替换=进程\命令(拆分\参数(别名[结果[0]]),真)
如果len(结果)==1:
结果=替换
其他:
结果=替换+结果[1:]
返回结果
def split_管道(参数):
cmd=[]
对于args中的arg:
如果arg=='|':
产量过程(cmd)
cmd=[]
其他:
cmd.append(arg)
#生产线的最后一部分
产量过程(cmd)
这是我为
split_pipeline
编写的单元测试:

import parser

def test_pipeline():
    args = ['1', '2', '|', '3', '|', '4']
    result = [i for i in parser.split_pipeline(args)]
    assert result == [['1', '2'], ['3'], ['4']]
当这个单元测试运行时,我得到一个错误,说没有活动的点击上下文。

点击库对象可以用作Python上下文。因此,要在测试中设置活动上下文,只需执行以下操作:

with ctx:
    ....
要创建要测试的
上下文,可以实例化如下内容:

ctx = click.Context(a_click_command, obj=my_context_object)
测试代码: 结果:
我制作了一个pytest fixture,它返回一个Click上下文
import click


def process_cmd():
    click.echo(click.get_current_context().obj['prop'])


def test_with_context():
    ctx = click.Context(click.Command('cmd'), obj={'prop': 'A Context'})
    with ctx:
        process_cmd()

test_with_context()
A Context