当我测试点击时,我知道基本设置如下所示:
import click
@click.command()
@click.argument('name')
def hello(name):
click.echo('Hello %s!' % name)
Run Code Online (Sandbox Code Playgroud)
测试文件
from click.testing import CliRunner
from hello import hello
def test_hello_world():
runner = CliRunner()
result = runner.invoke(hello, ['Peter'])
assert result.exit_code == 0
assert result.output == 'Hello Peter!\n'
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用日志记录而不是打印,则无法捕获输出或检查命令的返回值。例如:
from click.testing import CliRunner
from hello import hello
def test_hello_world():
runner = CliRunner()
result = runner.invoke(hello, ['Peter'])
assert result.exit_code == 0
assert result.output == 'Hello Peter!\n'
Run Code Online (Sandbox Code Playgroud)
click.echo如果不打印或“ing”它,我无法检查该返回值是否正确。
有没有办法使用单击检查返回值或检查输出与日志记录?
我编写了一个单元测试来强制抛出异常.抛出异常,但我的单元测试语句由于某种原因没有捕获它,并且意外失败.
这是单元测试:
def test900_001_ShouldRaiseExceptionDuplicateID(self):
hist = projecthistory.ProjectHistory()
myProject = project.Project(id = 42, locR = 10, locP = 15, locA = 30, eP = 200, eA= 210)
hist.addProject(myProject)
myProject2 = project.Project(id = 42, locR = 15, locP = 25, locA = 40, eP = 300, eA = 410)
self.assertRaises(ValueError, projecthistory.ProjectHistory, hist.addProject(myProject2))
Run Code Online (Sandbox Code Playgroud)
以下是与此相关的代码:
def addProject(self, proj):
duplicate = False
checkId = proj.getId()
#check to see if that id is already in the container if so, raise ValueError
#append project to container
for …Run Code Online (Sandbox Code Playgroud) 这个问题是关于 Python Click库的。
我想单击以收集我的命令行参数。收集后,我想重用这些值。我不想要任何疯狂的回调链,只需使用返回值。默认情况下,单击禁用使用返回值并调用sys.exit()。
我想知道如何正确调用standalone_mode( http://click.pocoo.org/5/exceptions/#what-if-i-don-t-want-that ),以防我想使用装饰器样式。上面链接的文档仅显示了使用单击(手动)创建命令时的用法。甚至有可能吗?下面显示了一个最小的例子。它说明了点击sys.exit()返回后如何直接调用gatherarguments
import click
@click.command()
@click.option('--name', help='Enter Name')
@click.pass_context
def gatherarguments(ctx, name):
return ctx
def usectx(ctx):
print("Name is %s" % ctx.params.name)
if __name__ == '__main__':
ctx = gatherarguments()
print(ctx) # is never called
usectx(ctx) # is never called
Run Code Online (Sandbox Code Playgroud)
$ python test.py --name Your_Name
我希望这是无状态的,意味着没有任何click.group功能 - 我只想要结果,而我的应用程序不退出。