rust - 检查 Rust 是否正在运行测试构建
问题描述
我可以cfg!(debug_assertions)
用来检查 Rust 项目是否在开发模式下运行,但我想知道如何检查测试是否正在运行。我可以在if
语句中使用类似的测试标志吗?
原因是在运行集成测试时防止数据库写入。
解决方案
您可以使用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)
版本,你会得到一个编译错误。
推荐阅读
- swift - iOS SwiftUI:如何在视图中检测 UITapGesture 的位置?
- reactjs - 如何将 Stockfish.js 添加到我的 react (+ typescript) 应用程序中?
- javascript - 网络音频:播放立体声(2 声道)mp3,因此只能在左耳听到通道 1,在右耳听到通道 2
- python - 从数据框创建 json 文件
- azure-devops - Azure Devops 拉取请求中的 Sonarcloud 门卡在等待状态
- javascript - NEXT_LOCALE cookie 被忽略。难道我做错了什么?
- serverless - 无法在 Azure Purview 上开始扫描 Azure Synapse Analytics 无服务器池
- python - Python asyncio 取消未等待的协程
- javascript - TypeError:无法读取未定义的属性“状态”(通过链接提供道具)
- python - 从数据框列创建集合和计数字典