检查Rust是否正在运行测试版本

时间:2019-05-20 08:38:16

标签: rust

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用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)版本,则会出现编译错误。