【问题标题】:Is it possible to construct a StructOpt Args object without parsing command line params for testing?是否可以在不解析命令行参数进行测试的情况下构造 StructOpt Args 对象?
【发布时间】:2020-07-07 04:55:59
【问题描述】:

我有一个 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);
}

【问题讨论】:

  • Args 是外部类型吗?通常,您定义自己的结构并在其上仅使用#[derive(StructOpt)],这意味着您可以按照自己喜欢的方式对其进行初始化。

标签: rust structopt


【解决方案1】:

是的,structopt 还提供了 from_iter and from_iter_safe,它可以满足您的期望:它们采用字符串的可迭代对象,并将其解析为 CLI args。

他们都真正委派鼓掌,但语义上 from_args 只是以 args_os() 作为参数调用 from_iter

from_iter_safe 可能是您想在测试中使用的那个:很像from_argsfrom_iter 将打印一条错误消息并在出现解析/匹配错误时立即退出。

【讨论】:

    猜你喜欢
    • 2022-11-20
    • 1970-01-01
    • 2013-10-22
    • 2010-10-10
    • 1970-01-01
    • 2013-06-07
    • 2013-01-30
    • 1970-01-01
    • 2014-12-17
    相关资源
    最近更新 更多