首页 > 解决方案 > 检查 Rust 是否正在运行测试构建

问题描述

我可以cfg!(debug_assertions)用来检查 Rust 项目是否在开发模式下运行,但我想知道如何检查测试是否正在运行。我可以在if语句中使用类似的测试标志吗?

原因是在运行集成测试时防止数据库写入。

标签: rust

解决方案


您可以使用cfg!(test)

if cfg!(test) {
    // do test stuff
} else {
    // do non-test stuff
}

但是,这可能会导致代码脆弱。例如,即使测试全部通过,您也可能不小心在生产环境中执行了某些代码。在项目级别切换代码通常更健壮,如果你弄错了会导致编译错误:

#[cfg(test)]
impl Write for DB {
    fn write(&mut self, buf: &[u8]) -> Result<usize> {
        // test stuff
    }

    fn flush(&mut self) -> Result<()> {
        // test stuff
    }
}

#[cfg(not(test))]
impl Write for DB {
    fn write(&mut self, buf: &[u8]) -> Result<usize> {
        // actually write
    }

    fn flush(&mut self) -> Result<()> {
        // actually flush
    }
}

如果你忘记实现not(test)版本,你会得到一个编译错误。


推荐阅读