gpt4 book ai didi

unit-testing - 无法使用 i686-linux-android 目标运行单元测试

转载 作者:行者123 更新时间:2023-11-29 08:09:16 25 4
gpt4 key购买 nike

我在 Linux 本地机器上运行 Rust(工具链 stable-x86_64-unknown-linux-gnu)。我的库在我的 Android 应用程序中构建并运行良好。但是,如果我指定 i686-linux-android 目标,我将无法运行任何单元测试。

我可以在空项目上重现它。

我创建了新的 rust 项目

cargo new android_test --lib

通过 /android_test/.cargo/config 设置 Android NDK arlinker

[target.i686-linux-android]
ar = "ndk/x86/bin/i686-linux-android-ar"
linker = "ndk/x86/bin/i686-linux-android-clang"

简单的测试就会成功。

cargo test

但如果我设置目标三倍,它会失败。

cargo test --target i686-linux-android

Running target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7 error: could not execute process /home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7 (never executed) Caused by: No such file or directory (os error 2)

如果我通过 adb 手动将 android_test-a71bf7c418798cd7 文件推送到我的 Android 模拟器,单元测试将运行并通过。

我尝试创建自定义运行者。但结果是一样的。

android_runner.sh

#!/bin/sh

set -e
adb push "$1" "/data/local/tmp/$1"
adb shell "/data/local/tmp/$1"

/android_test/.cargo/config

[target.i686-linux-android]
ar = "ndk/x86/bin/i686-linux-android-ar"
linker = "ndk/x86/bin/i686-linux-android-clang"
runner = ["android_runner.sh"]

我错过了什么吗?我可以使用 cargo test 在模拟器上运行测试吗?还是我应该为此目的使用脚本?

最佳答案

通常错误是小而愚蠢的。

在我的例子中,我应该修复运行器脚本的路径。

我的项目结构:

  • /. cargo

    • 配置
  • ndk

  • android_runner.sh

  • 其他文件和目录

/android_test/.cargo/config

[target.i686-linux-android]
ar = "./ndk/x86/bin/i686-linux-android-ar"
linker = "./ndk/x86/bin/i686-linux-android-clang"
# change android_runner.sh to ./android_runner.sh
runner = ["./android_runner.sh"]

我还修复了脚本。现在我从路径中提取二进制文件名(例如 /home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7)并将它推到设备上的某个位置。如果没有那个 adb 将尝试将其推送到更长的目录。

/data/local/tmp//home/zellius/Projects/android_test/target/i686-linux-android/debug/deps/android_test-a71bf7c418798cd7*

/android_test/android_runner.sh

#!/bin/sh

test_file_name=$(basename -- "$1")
adb push "$1" "/data/local/tmp/$test_file_name"
adb shell "/data/local/tmp/$test_file_name"

现在我可以通过 cargo test --target i686-linux-android 在我的本地 x86 模拟器上运行测试。

也许有更好的方法来做到这一点,但目前它适用于我的情况。

关于unit-testing - 无法使用 i686-linux-android 目标运行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53814290/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com