Testing 如何递归测试目录下的所有板条箱?

Testing 如何递归测试目录下的所有板条箱?,testing,rust,rust-cargo,Testing,Rust,Rust Cargo,一些项目包括多个板条箱,这使得在每个板条箱中手动运行所有测试很麻烦 是否有一种方便的方法可以递归运行货物测试 您可以使用shell脚本。据报道, 将打印出包含Cargo.toml的目录,因此,将其与标准shell util的其余部分组合在一起,我们就可以 for f in $(find . -name Cargo.toml -printf '%h\n' | sort -u); do pushd $f > /dev/null; cargo test; popd > /dev

一些项目包括多个板条箱,这使得在每个板条箱中手动运行所有测试很麻烦


是否有一种方便的方法可以递归运行
货物测试

您可以使用shell脚本。据报道,

将打印出包含
Cargo.toml
的目录,因此,将其与标准shell util的其余部分组合在一起,我们就可以

for f in $(find . -name Cargo.toml -printf '%h\n' | sort -u); do
  pushd $f > /dev/null;
  cargo test;
  popd > /dev/null;
done

它将遍历包含
货物的所有目录。toml
(板条箱的好选择)并在其中运行
货物测试

更新:由于添加此答案1.15已发布,添加
货物测试--all
,将与自定义脚本进行比较


这个shell脚本在git存储库上递归地运行测试,测试包含
Cargo.toml
文件的所有目录(对于其他VCS来说编辑起来非常简单)

  • 在第一个错误时退出
  • 使用
    nocapture
    以便显示标准输出
    (取决于个人喜好,易于调整)
  • 使用
    RUST\u BACKTRACE
    集运行测试,以获得更有用的输出
  • 在两个单独的步骤中构建和运行
    (1.14稳定版中的解决方案)
  • 可选的
    CARGO\u-BIN
    环境变量,用于覆盖CARGO命令
    (如果您想使用货物包装器,例如,方便使用)
脚本:

#/bin/bash
#出现第一个错误时退出,请参阅:http://stackoverflow.com/a/185900/432509
错误(){
本地父项_lineno=“$1”
本地消息=“$2”
本地代码=“${3:-1}”
如果[[-n“$message”]];则
echo“第${parent\u lineno}行上或附近出错:${message};正在退出,状态为${code}”
其他的
echo“第${parent_lineno}行上或附近出错;正在退出,状态为${code}”
fi
退出“${code}”
}
陷阱'error${LINENO}'错误
#用陷阱完成
#支援货物命令超控
如果[-z$CARGO_BIN]];然后
货物箱=货物
fi
#顶级吉特回购
ROOT=$(git版本解析--显示顶级)
对于$中的cargo_dir(查找“$ROOT”-name cargo.toml-printf'%h\n');做
echo“在$cargo_dir中运行测试”
pushd“$cargo\u dir”
生锈\u回溯=0$CARGO\u BIN测试-不运行
锈蚀_回溯=1美元货物_箱测试--nocapture
邻苯二胺
完成

多亏了@аачааааааааааааааааааааааа1072。集合将它与一个
生成文件
结合使用,该文件可用于单独编译每个板条箱


(工作区功能有助于避免多次编译常见依赖项)

很高兴看到我不是唯一一个希望在同一存储库中捆绑多个板条箱的人。我很惊讶cargo似乎没有更好的支持。这个选项实际上在今天的1.15版本中就已经稳定生锈了!等待的人会得到好东西。
for f in $(find . -name Cargo.toml -printf '%h\n' | sort -u); do
  pushd $f > /dev/null;
  cargo test;
  popd > /dev/null;
done