我知道编译器可以直接在arm-linux-androideabi
上运行,但Android模拟器(我的意思是在x86 / amd64上模拟ARM)很慢,
所以我不想在模拟器上使用cargo
和rustc
,我只想在其上运行测试。
我想在我的PC上交叉编译测试(cargo test --target=arm-linux-androideabi --no-run
?),然后在模拟器上上传并运行它们,
希望能抓住像this这样的bug。
如何在不运行cargo test
的情况下运行cargo test
?它是否像运行使用cargo test --no-run
?
答案 0 :(得分:5)
cargo test
支持两种测试,一种是正常测试(#[test] fn
和tests/
内的文件),另一种是文档测试。
正常测试 就像运行所有二进制文件一样简单。如果测试以错误代码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