#modify #assert #macro #mutate #test

assert-not-modified

宏,给定一个变量和一段代码块,执行代码块并检查变量是否已更改

4 个版本 (1 个稳定版)

1.0.0 2020 年 11 月 30 日
0.1.2 2020 年 11 月 28 日
0.1.1 2020 年 11 月 28 日
0.1.0 2020 年 11 月 28 日

#460测试

GPL-3.0 许可协议

14KB

assert-not-modified

Rust 宏,给定一个变量和一段代码块,执行代码块并检查变量是否已更改。

例如,这可以检查函数没有副作用。

给定的变量必须实现 Clone 和 Debug。

恐慌

如果数据被修改,则会引发恐慌并显示消息“数据被修改了,不应该修改”。

示例

#[macro_use] extern crate assert_not_modified;

// This function returns Err but modifies x anyway. This is misleading.
fn modify_x_or_err(x: &mut i32) -> Result<(), String> {
    *x = *x + 1;
    Err("Something wrong happened !".to_owned())
}

// This test will expose the lying function :
assert!(std::panic::catch_unwind(|| {
    let mut x = 3;
    assert_not_modified!(x, modify_x_or_err(&mut x)); // Panics
})
.is_err());

lib.rs:

宏,给定一个变量和一段代码块,执行代码块并检查变量是否已更改。

例如,这可以检查函数没有副作用。

无运行时依赖