我如何测试 RAII?
How can I test RAII?
我目前正在尝试在 Rust 中测试一些 RAII 代码,我想延迟删除一个值,直到特定的代码行。
在 C# 中,GC.KeepAlive 阻止对象在调用 GC.KeepAlive 之前被垃圾回收。从应用程序的角度来看,该方法本质上是一个空操作,但它保证了对对象的有效引用,直到代码流中的特定点。它主要用于测试。
在 Rust 中是否有一种惯用的方法可以延迟删除值直到某个点?我正在尝试测试一些 RAII 代码,我更愿意使用其他 Rust 程序员可识别的约定。
例如:
let foo = some_func();
// Force foo to be deallocated
// This line does something that, if foo were still alive, it would fail the test
some_other_func();
最简单的方法是显式删除对象。当您调用 mem::drop
时,对象被移入该函数,因此该对象必须存在于该点之前而不是该点之后的调用者中。这向其他 Rust 开发人员发出信号,表明您当时明确想要销毁。它不一定表明为什么你想在那里破坏,所以如果从上下文中看不出来,你可能仍然需要评论。
例如,如果您有一个临时目录并需要保留它:
extern crate tempfile;
fn do_something() {
let tempdir = tempfile::TempDir::new();
// Do some things with your temporary directory.
std::mem::drop(tempdir);
// Do some things without your temporary directory.
}
我目前正在尝试在 Rust 中测试一些 RAII 代码,我想延迟删除一个值,直到特定的代码行。
在 C# 中,GC.KeepAlive 阻止对象在调用 GC.KeepAlive 之前被垃圾回收。从应用程序的角度来看,该方法本质上是一个空操作,但它保证了对对象的有效引用,直到代码流中的特定点。它主要用于测试。
在 Rust 中是否有一种惯用的方法可以延迟删除值直到某个点?我正在尝试测试一些 RAII 代码,我更愿意使用其他 Rust 程序员可识别的约定。
例如:
let foo = some_func();
// Force foo to be deallocated
// This line does something that, if foo were still alive, it would fail the test
some_other_func();
最简单的方法是显式删除对象。当您调用 mem::drop
时,对象被移入该函数,因此该对象必须存在于该点之前而不是该点之后的调用者中。这向其他 Rust 开发人员发出信号,表明您当时明确想要销毁。它不一定表明为什么你想在那里破坏,所以如果从上下文中看不出来,你可能仍然需要评论。
例如,如果您有一个临时目录并需要保留它:
extern crate tempfile;
fn do_something() {
let tempdir = tempfile::TempDir::new();
// Do some things with your temporary directory.
std::mem::drop(tempdir);
// Do some things without your temporary directory.
}