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

fgh*_*ghj 5 rust rust-cargo

我知道,编译器可以直接运行arm-linux-androideabi,但Android模拟器(我的意思是在x86/AMD64 ARM的仿真)是缓慢的,所以我不想使用cargo,并rustc在模拟器上,我只希望在其上运行测试.

我想我的电脑(上交叉编译测试cargo test --target=arm-linux-androideabi --no-run?),然后上传并在模拟器上运行他们,希望能赶上像虫子.

如何在cargo test不运行的情况下运行cargo test?它是否像运行所有使用的二进制文件一样简单cargo test --no-run

ken*_*ytm 5

支持的测试有两种cargo test,一种是普通测试(#[test] fns和文件里面tests/),另一种是doc测试.

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

Doc测试无法进行交叉测试.Doc测试是rustdoc使用编译器库直接编译和执行的,因此必须在ARM机器上安装编译器才能运行doc测试.事实上,cargo test --doc当HOST≠TARGET时运行什么也不做.

因此,只要您不依赖doc-tests进行报道,您对上一个问题的回答是肯定的.


从Rust 1.19开始,cargo支持目标特定的运行程序,允许您指定在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
Run Code Online (Sandbox Code Playgroud)

把这个放到你的.cargo/config:

[target.arm-linux-androideabi]
runner = ["/path/to/your/run/script.sh"]
Run Code Online (Sandbox Code Playgroud)

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


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