如何在没有Rust编译器的情况下在另一台机器上运行货物测试?

时间:2017-07-06 11:29:19

标签: rust rust-cargo

我知道编译器可以直接在arm-linux-androideabi上运行,但Android模拟器(我的意思是在x86 / amd64上模拟ARM)很慢, 所以我不想在模拟器上使用cargorustc,我只想在其上运行测试。

我想在我的PC上交叉编译测试(cargo test --target=arm-linux-androideabi --no-run?),然后在模拟器上上传并运行它们, 希望能抓住像this这样的bug。

如何在不运行cargo test的情况下运行cargo test?它是否像运行使用cargo test --no-run

构建的所有二进制文件一样简单

3 个答案:

答案 0 :(得分:5)

cargo test支持两种测试,一种是正常测试(#[test] fntests/内的文件),另一种是文档测试。

正常测试 就像运行所有二进制文件一样简单。如果测试以错误代码0退出,则认为该测试成功。

Doc测试不能进行交叉测试。 Doc测试由rustdoc使用编译器库直接编译和执行,因此必须在ARM机器上安装编译器才能运行doc测试。实际上,当HOST≠TARGET时运行cargo test --doc将无效。

因此,只要您不依赖doc-tests进行报道,您上一个问题的答案就是

从Rust 1.19开始,cargo支持target specific runners,它允许您指定在ARM计算机上上载和执行测试程序的脚本。

#!/bin/sh
set -e
adb push "$1" "/sdcard/somewhere/$1"
adb shell "chmod 755 /sdcard/somewhere/$1 && /sdcard/somewhere/$1" 
# ^ note: may need to change this line, see https://stackoverflow.com/q/9379400

将此内容发送到.cargo/config

[target.arm-linux-androideabi]
runner = ["/path/to/your/run/script.sh"]

然后cargo test --target=arm-linux-androideabi应该Just Work™。

如果您的项目托管在GitHub上并使用Travis CI,您可能还想查看trust。它提供了一个预先打包的解决方案,用于测试许多架构,包括CI上的ARMv7 Linux(不幸的是没有Android)。

答案 1 :(得分:1)

我对在Android上进行测试的建议是使用dinghy,它提供了不错的包装器命令,可用于在Android / iOS设备/模拟器/模拟器上进行构建和测试。

答案 2 :(得分:0)

对于仍然可能对此感兴趣的人: 使用cargo -v test

运行-v

然后寻找该输出

 Finished release [optimized] target(s) in 21.31s
     Running `/my-dir/target/release/deps/my-binary-29b03924d05690f1`  

然后只需将测试二进制文件/my-dir/target/release/deps/my-binary-29b03924d05690f1复制到机器上,而无需rustc