在Rust中进行单元测试后清理的好方法是什么?

时间:2016-07-07 18:58:51

标签: unit-testing rust

由于测试函数在失败时中止,因此不能简单地在被测函数的末尾进行清理。

从其他语言的测试框架中,通常可以设置一个回调来处理每个测试函数末尾的清理。

1 个答案:

答案 0 :(得分:8)

  

由于测试函数在失败时中止,因此不能简单地在被测函数的末尾进行清理。

使用RAII并实施Drop。它无需调用任何

struct Noisy;

impl Drop for Noisy {
    fn drop(&mut self) {
        println!("I'm melting! Meeeelllllttttinnnng!");
    }
}

#[test]
fn always_fails() {
    let my_setup = Noisy;
    assert!(false, "or else...!");
}
running 1 test
test always_fails ... FAILED

failures:

---- always_fails stdout ----
    thread 'always_fails' panicked at 'or else...!', main.rs:12
note: Run with `RUST_BACKTRACE=1` for a backtrace.
I'm melting! Meeeelllllttttinnnng!


failures:
    always_fails

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured