Как я могу запустить грузовые тесты на другой машине без компилятора Rust?

Я знаю, что компилятор может работать непосредственно на arm-linux-androideabi, но эмулятор Android (я имею в виду эмуляцию ARM на x86 / amd64) работает медленно, поэтому я не хочу использовать cargo и rustc на эмуляторе, я хочу только запускать тесты в теме.

Я хочу скомпилировать тесты на моем ПК (cargo test --target=arm-linux-androideabi --no-run?), А затем загрузить и запустить их на эмуляторе, надеясь отловить такие ошибки, как это.

Как я могу запустить cargo test, не выполняя cargo test? Это так же просто, как запустить все двоичные файлы, созданные с помощью cargo test --no-run?


person fghj    schedule 06.07.2017    source источник
comment
Итак, вы хотите указать цель rustc?   -  person Stargateur    schedule 06.07.2017
comment
@Stargateur Нет, я хочу запускать тесты без cargo и rustc на машине.   -  person fghj    schedule 06.07.2017


Ответы (3)


cargo test поддерживает два типа тестов: один - это обычные тесты (#[test] fns и файлы внутри tests/), другой - это тесты документации.

Обычные тесты так же просты, как запуск всех двоичных файлов. Тест считается успешным, если он завершился с кодом ошибки 0.

Документ-тесты не могут подвергаться перекрестному тестированию. Док-тесты компилируются и выполняются непосредственно rustdoc с использованием библиотек компилятора, поэтому компилятор должен быть установлен на машине ARM для запуска тестов документации. Фактически, запуск cargo test --doc, когда HOST ≠ TARGET ничего не даст.

Итак, ответ на ваш последний вопрос - да, если вы не полагаетесь на док-тесты для покрытия.


Начиная с 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

Поместите это в свой .cargo/config:

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

тогда cargo test --target=arm-linux-androideabi should Just Work ™.


Если ваш проект размещен на GitHub и использует Travis CI, вы также можете попробовать trust. Он предоставляет готовое решение для тестирования на многих архитектурах, включая ARMv7 Linux на CI (к сожалению, без Android).

person kennytm    schedule 06.07.2017
comment
Отлично, именно так я и хочу, чтобы это было реализовано. - person fghj; 06.07.2017

Я рекомендую для тестирования на Android использовать dinghy, который предоставляет удобные команды оболочки для создания и тестирования на Android. / Устройства iOS / эмуляторы / симуляторы.

person Ted Mielczarek    schedule 28.01.2020

Для тех, кто все еще может быть заинтересован в этом: запустите 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

person Alec Matusis    schedule 18.09.2020