gpt4 book ai didi

unit-testing - 如何测试依赖于环境变量的 Rust 方法?

转载 作者:行者123 更新时间:2023-11-29 07:49:20 25 4
gpt4 key购买 nike

我正在构建一个库,该库会询问其运行环境以将值返回给请求程序。有时就像

一样简单
pub fn func_name() -> Option<String> {
match env::var("ENVIRONMENT_VARIABLE") {
Ok(s) => Some(s),
Err(e) => None
}
}

但有时会更复杂一些,甚至会产生由各种环境变量组成的结果。我如何测试这些方法是否按预期运行?

最佳答案

“我如何测试 X”几乎总是用“通过控制 X”来回答。在这种情况下,您需要控制环境变量:

use std::env;

fn env_is_set() -> bool {
match env::var("ENVIRONMENT_VARIABLE") {
Ok(s) => s == "yes",
_ => false
}
}

#[test]
fn when_set_yes() {
env::set_var("ENVIRONMENT_VARIABLE", "yes");
assert!(env_is_set());
}

#[test]
fn when_set_no() {
env::set_var("ENVIRONMENT_VARIABLE", "no");
assert!(!env_is_set());
}

#[test]
fn when_unset() {
env::remove_var("ENVIRONMENT_VARIABLE");
assert!(!env_is_set());
}

但是,您需要注意环境变量是一种共享资源。来自 the docs for set_var ,强调我的:

Sets the environment variable k to the value v for the currently running process.

您可能还需要注意 Rust 测试运行器默认并行运行测试,因此一个测试可能会破坏另一个。

此外,您可能希望在测试后将环境变量“重置”为已知的良好状态。

关于unit-testing - 如何测试依赖于环境变量的 Rust 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858323/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com