1. 命令行运行特定单测
总有需要用命令行跑单测的场景,比如 vscode 上的 rust-analyzer 插件突然坏掉。。这个时候我们需要:
cargo test --package my_project --bin test -- api::handler::test --show-output
cargo test --package my_project --lib -- api::handler::test --show-output
参数:
- package:这个是为了 workspace 模式而设计的。对于小型项目中常见的单 package workspace,就用 Cargo.toml 里定义的包名即可。
- bin:指定二进制对象名字。如果需要指定 src/bin 目录下的单测对象,则用这个。若无,则还是用和 Cargo.toml 同名的即可
- lib:如果是 lib 包中的单测则用这个
最后指定测试对象,注意前面要有一个 --
。
假设我们在 src/api/handler.rs 中存在这样的单测结构:
#[cfg(test)]
mod tests {
#[test]
fn test_1() {
// ....
}
#[test]
fn test_2() {
//....
}
}
那么,可以用这样两种方式运行单测:
-- api::handler::tests
运行tests
module 中的所有单测-- api::handler::tests::test_2 --exact
指定运行 test_2 这个单测函数
2. no authentication methods succeeded 问题
这个问题常见于企业内的开发,cargo 无法拉取私有 gitlab 上的代码,导致无法编译。解决方案其实在报错信息中就有说明:
Caused by:
failed to authenticate when downloading repository
* attempted ssh-agent authentication, but no usernames succeeded: `git`
if the git CLI succeeds then `net.git-fetch-with-cli` may help here
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
即,在工程根目录创建 .cargo/config.toml ,并在其中加入如下片段即可:
[net]
git-fetch-with-cli = true
这样 cargo 会调用系统上的 git 二进制来拉代码,而大家的 git 想必是已经配置好了企业仓库的鉴权的。
这个问题主要还是 cargo 默认使用的 libgit2 对鉴权支持不友好导致的。更详细的说明可以参考 https://docs.shipyard.rs/configuration/git-fetch-with-cli.html