Typer命令返回值是否影响用户使用?兼询与Click的行为兼容性
Typer命令返回值:对终端用户无影响,测试友好
结论先行:Typer完全继承了Click的返回值处理逻辑,给命令函数添加return语句不会影响终端用户的使用体验,同时能完美满足你用CliRunner做单元测试的需求。
具体细节:
- 终端运行场景:当用户直接在终端执行你的CLI工具时,Typer默认以
standalone_mode=True的方式启动,此时命令函数的返回值会被自动忽略——终端只会输出你通过typer.echo()等方式显式输出的内容,返回值不会被打印,也不会引发任何异常。 - 单元测试场景:使用
CliRunner.invoke()测试时,Typer内部会自动处理standalone_mode,此时命令函数的返回值会被存入测试结果对象的return_value属性中,你可以直接用它做断言验证。
代码示例:
修改前的命令函数:
import typer app = typer.Typer() @app.command() def greet(name: str): msg = f"Hi, {name}!" typer.echo(msg)
修改后带返回值的版本(仅添加一行return):
import typer app = typer.Typer() @app.command() def greet(name: str): msg = f"Hi, {name}!" typer.echo(msg) return msg # 仅用于测试捕获
- 终端运行效果:执行
python your_cli.py greet Bob,终端只会输出Hi, Bob!,和修改前完全一致。 - 测试代码使用:
from typer.testing import CliRunner runner = CliRunner() test_result = runner.invoke(app, ["greet", "Bob"]) assert test_result.return_value == "Hi, Bob!" assert test_result.exit_code == 0
内容的提问来源于stack exchange,提问作者XuanInsr
相关产品推荐
相关产品推荐

