首页 > 解决方案 > 是否可以在不解析命令行参数的情况下构造一个 StructOpt Args 对象进行测试?

问题描述

我有一个 fn main,它通过 StructOpt .. Args::from_args 解析参数。

有没有办法创建这个 Args 对象而不实际启动可执行文件进行测试?我可以直接创建一个 Args 对象吗?

例如,我可以这样做吗

fn test_function() {
    let args = Args::default();
    args.param1 = "value1";
    args.param2 = "value2";

    core_function(args);
}

fn main() {
    let args = Args::from_args();
    core_function(args);
}

标签: ruststructopt

解决方案


是的,structopt 还提供from_iterfrom_iter_safe你所期望的功能:它们采用字符串的可迭代对象,并将它们解析为 CLI 参数。

他们所有人都真正委派鼓掌,但在语义上from_args只是from_iterargs_os()作为参数调用。

from_iter_safe可能是您想在测试中使用的那个:很像,如果发生解析/匹配错误from_args,将打印一条错误消息并立即退出。from_iter


推荐阅读