Rust测试框架dinghy-test的使用:高效跨平台测试工具与自动化测试解决方案
Rust测试框架dinghy-test的使用:高效跨平台测试工具与自动化测试解决方案
什么是Dinghy?
Dinghy是一个cargo
扩展,用于在交叉编译场景中实现cargo工作流程。它特别适用于基于"小型"处理器的设备,如Android和iOS手机,或小型单板计算机如Raspberry Pi等无法或不便进行本地编译的情况。
示例演示
如何使用?
一旦dinghy配置了工具链和设备,你就可以在任何cargo项目中运行测试和基准测试,大多数情况下无需修改项目。
只需在cargo
和其子命令之间添加dinghy -d some_device
:
cargo dinghy -d my_android test
cargo dinghy -d my_raspberry bench
默认情况下,不使用-d
参数时,Dinghy会像普通cargo
一样进行本地构建。
完整示例代码
以下是一个使用dinghy-test的完整示例:
// 首先确保已安装dinghy-test
// cargo install dinghy-test
// 示例测试代码
#[cfg(test)]
mod tests {
#[test]
fn test_addition() {
assert_eq!(2 + 2, 4);
}
#[test]
fn test_subtraction() {
assert_eq!(5 - 3, 2);
}
}
// 使用dinghy运行测试的配置示例
// 在.cargo/config.toml中添加:
/*
[target.'cfg(all(any(target_arch="aarch64",target_arch="x86_64"),target_vendor="apple",any(target_os="ios",target_os="tvos",target_os="apple-watchos")))']
runner = "cargo dinghy runner --"
*/
// 然后可以运行:
// cargo dinghy -d my_ios_device test
完整示例demo
以下是一个更完整的dinghy-test使用示例,包含项目配置和测试代码:
// Cargo.toml 配置
/*
[package]
name = "dinghy-demo"
version = "0.1.0"
edition = "2021"
[dependencies]
[dev-dependencies]
dinghy-test = "0.4"
*/
// src/lib.rs
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn subtract(a: i32, b: i32) -> i32 {
a - b
}
// tests/integration_test.rs
use dinghy_demo::{add, subtract};
#[test]
fn test_add() {
assert_eq!(add(2, 3), 5);
}
#[test]
fn test_subtract() {
assert_eq!(subtract(5, 2), 3);
}
// .cargo/config.toml 配置
/*
[target.aarch64-linux-android]
runner = "cargo dinghy runner --"
[target.armv7-linux-androideabi]
runner = "cargo dinghy runner --"
[target.'cfg(all(any(target_arch="aarch64",target_arch="x86_64"),target_vendor="apple",any(target_os="ios",target_os="tvos",target_os="apple-watchos")))']
runner = "cargo dinghy runner --"
*/
// 运行测试的命令
// cargo dinghy -d my_android_device test
// cargo dinghy -d my_ios_simulator test
入门指南
根据目标和开发环境的不同,设置Dinghy的难易程度会有所变化:
- Android相对容易,特别是如果你已经是移动开发者
- iOS设置步骤较多,但Apple提供了所需的一切
- 其他远程SSH可访问的设备从dinghy的角度来看是最简单的
高级功能
- 一些项目需要资源文件来运行测试或基准测试
- 在大型项目中,可能需要根据测试平台过滤项目成员
- 传递环境变量到可执行文件有时很有用
- Dinghy提供了覆盖系统来"添加"内容到工具链的sysroot
dinghy-build
crate提供了一些在交叉编译上下文中有用的build.rs
功能
仅使用Dinghy作为运行器
如果你的项目已经能够为目标平台构建而无需dinghy,只想使用dinghy在设备上运行代码,可以直接使用dinghy的捆绑运行器。只需在.cargo/config
中注册dinghy作为运行器:
[target.'cfg(all(any(target_arch="aarch64",target_arch="x86_64"),target_vendor="apple",any(target_os="ios",target_os="tvos",target_os="apple-watchos")))']
runner = "cargo dinghy runner --"
然后可以直接运行测试,例如:cargo test --target aarch64-apple-ios-sim
许可证
Dinghy采用以下许可证之一:
- Apache License, Version 2.0
- MIT license
贡献
除非你明确声明,否则任何有意提交的贡献都将按上述双重许可,不附加任何额外条款或条件。
1 回复