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

IceyEC

我正在建立一个查询其运行环境以将值返回给询问程序的库。有时像

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

但有时会更加复杂,甚至导致结果包含各种环境变量。如何测试这些方法是否按预期运行?

Shepmaster

几乎总是用“通过控制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());
}

但是,您需要知道环境变量是共享资源。的文档中set_var,重点是:

将环境变量设置当前正在运行的进程k的值v

您可能还需要注意,Rust测试运行程序默认情况下会并行运行测试,因此有可能一个测试掩盖另一个。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用JUnit测试依赖于环境变量的代码?

如何设置一个依赖于另一个环境变量?(视窗)

如何测试依赖于库的代码?

如何测试依赖于硬件的功能?

如何对依赖于springBoot applicationContext的单元测试方法进行单元测试?

如何对依赖于其他方法的测试方法进行单元化

如何让变量依赖于类中的其他变量?

如何使变量依赖于其他变量?

如何使用依赖于已运行的TestSetup方法的NUnit测试用例?

如何对依赖于实例属性的实例方法进行单元测试?

单元测试依赖于StreamReader读取文件的方法

使用RSpec测试依赖于外部Cassandra调用的方法

如何(py)测试依赖于当前时间的函数?

如何测试依赖于useContext钩子的react组件?

如何使用依赖于插件的代码运行测试?

我该如何测试依赖于DomSanitizer的管道?

如何测试依赖于包含 BehaviorSubject 的服务的 Angular 组件?

如何使变量名依赖于python中的输入?

如何指定依赖于 dplyr 中的分组变量的条件?

如何在建立和检查依赖于未经测试的方法的情况下测试方法?

如何测试依赖于另一个服务(又依赖于Http服务)的服务/组件?

编写依赖于IntersectionObserver调用的测试

依赖于语言环境的bash脚本:如何正确确保语言环境?

创建依赖于变量的列表

Android 变量依赖于时间

FsCheck:如何生成依赖于其他测试数据的测试数据?

如何测试依赖于先前测试通过的 AngularJS 服务?

有哪些方法可以测试依赖于静态方法的方法?

如何创建依赖于输出的sliderInput?