我可以使用unique_ptr
来检查Rust项目是否在开发模式下运行,但是我想知道如何检查是否正在运行测试。我可以在cfg!(debug_assertions)
语句中使用的测试是否有类似的标志?
原因是为了防止在运行集成测试时写入数据库。
答案 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)
版本,则会出现编译错误。