我可以cfg!(debug_assertions)用来检查 Rust 项目是否在开发模式下运行,但我想知道如何检查是否正在运行测试。我可以在if语句中使用类似的测试标志吗?
原因是为了防止在运行集成测试时写入数据库。
您可以使用cfg!(test):
if cfg!(test) {
// do test stuff
} else {
// do non-test stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,这可能会导致代码脆弱。例如,即使测试全部通过,您也可能不小心没有在生产中执行某些代码。在项目级别切换代码通常更健壮,如果出错会导致编译错误:
#[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
}
}
Run Code Online (Sandbox Code Playgroud)
如果忘记实现该not(test)版本,则会出现编译错误。
| 归档时间: |
|
| 查看次数: |
1412 次 |
| 最近记录: |