6 个版本
0.2.4 | 2024 年 8 月 13 日 |
---|---|
0.2.3 | 2024 年 6 月 10 日 |
0.2.2 | 2023 年 6 月 10 日 |
0.2.1 | 2023 年 3 月 8 日 |
0.1.0 | 2022 年 6 月 11 日 |
#80 在 测试 中
每月 128 次下载
98KB
2K SLoC
avr-tester —
由 AVR 微控制器固件的功能测试框架,由 simavr 提供。
简单来说,几秒钟内对你的微控制器固件进行黑盒测试!
入门指南
为你的项目测试创建一个专属的 crate
$ cargo new yourproject-tests --lib
... 将 avr-tester
添加为其依赖项
# yourproject-tests/Cargo.toml
[dependencies]
avr-tester = "0.2"
... 然后,就像这样,开始编写测试
// yourproject-tests/src/lib.rs
use avr_tester::*;
fn avr() -> AvrTester {
AvrTester::atmega328p()
.with_clock_of_16_mhz()
.load("../../yourproject/target/atmega328p/release/yourproject.elf")
}
// Assuming `yourproject` implements a ROT-13 encoder:
#[test]
fn short_text() {
let mut avr = avr();
// Let's give our firmware a moment to initialize:
avr.run_for_ms(1);
// Now, let's send the string:
avr.uart0().write("Hello, World!");
// ... give the AVR a moment to retrieve it & send back, encoded:
avr.run_for_ms(1);
// ... and, finally, let's assert the outcome:
assert_eq!("Uryyb, Jbeyq!", avr.uart0().read::<String>());
}
#[test]
fn long_text() {
let mut avr = avr();
avr.run_for_ms(1);
avr.uart0().write("Lorem ipsum dolor sit amet, consectetur adipiscing elit");
avr.run_for_ms(10);
assert_eq!(
"Yberz vcfhz qbybe fvg nzrg, pbafrpgrghe nqvcvfpvat ryvg",
avr.uart0().read::<String>(),
);
}
... 测试完成后,只需在 yourproject-tests
内运行 cargo test
:-)
请注意,由于 AvrTester 模拟实际的 AVR,你不需要对 yourproject
进行任何修改 - 它可以使用定时器、GPIO 等等,一切应该都能正常工作™。
实际上,yourproject
甚至不需要用 Rust 编写 - 你可以为用 C、Zig 或其他任何语言编写的固件创建基于 Rust 的测试!
示例
需求与支持的平台
见:simavr-ffi。
路线图
以下功能似乎由 simavr 支持,但尚未在 AvrTester 中公开
- 中断,
- EEPROM,
- I2C,
- 看门狗,
- TWI,
- https://crates.org.cn/crates/simavr-section,
- USB。
(你的固件可以使用这些功能,但你将无法测试它们。)
注意事项
- 触发 AVR 的睡眠模式将导致 Rust 代码恐慌,因为唤醒 AVR 的唯一方法是触发中断,而这些功能目前还不支持。
贡献
欢迎拉取请求!
测试
AvrTester 的集成测试位于 avr-tester/tests
- 你可以使用以下命令运行它们
$ cd avr-tester
$ cargo test
请注意,为了使这些测试正常工作,你可能需要一些额外的依赖项
... 在 Nix(Linux / MacOS)上
$ nix-shell
# and then `cargo test`
... 在 Ubuntu 上
$ sudo apt install avr-libc gcc-avr
# and then `cargo test`
许可证
版权所有 (c) 2022 Patryk Wychowaniec [email protected].
遵循 MIT 许可协议。
依赖项
~3.5–6MB
~63K SLoC