22 个版本 (12 个重大更新)
0.16.1 | 2024年2月29日 |
---|---|
0.15.0 | 2024年2月21日 |
0.12.1 | 2023年12月20日 |
0.11.1 | 2023年11月21日 |
0.4.0 | 2021年10月18日 |
#2542 in 魔法豆
每月211次下载
在 2 个crate中使用(通过marine-rs-sdk-test)
5KB
Marine 测试 Rust SDK
此SDK旨在帮助针对Marine的开发者测试他们的Wasm模块和服务,因为cargo test
无法运行此类模块,但这是必要的。为了避免这种限制,SDK引入了#[marine_test]
宏,它执行大部分繁重的工作,使开发者能够像预期的那样使用cargo test
。也就是说,#[marine_test]
宏根据Wasm模块和相关的配置文件生成必要的代码来调用Marine,每个测试函数一个实例,以便实际的测试函数是针对Wasm模块而不是本地代码运行的。
使用方法
SDK的核心组件是#[marine_test]
宏,它可以封装测试函数,提供类似于“纯Rust”的体验。封装后的函数应接收一个代表模块接口的特殊对象,以下是一个示例。
use marine_rs_sdk::marine;
pub fn main() {}
#[marine]
pub fn greeting(name: String) -> String {
format!("Hi, {}", name)
}
#[cfg(test)]
mod tests {
use marine_rs_sdk_test::marine_test;
#[marine_test(config_path = "../Config.toml", modules_dir = "../artifacts")]
fn test(greeting: marine_test_env::greeting::ModuleInterface) {
let actual = greeting.greeting("John".to_string());
assert_eq!(actual, "Hi, John");
}
}
此示例展示了一个简单的模块,该模块有一个导出函数greeting
和一个测试。测试函数使用#[marine_test]
宏进行封装,该宏指定了配置文件(Config.toml
)和包含我们使用marine CLI构建命令编译项目后获得的Wasm模块的目录。此宏在底层生成必要的粘合代码,以实例化Marine实例并调用其中加载的greeting模块。
在准备好我们的Wasm模块和测试后,我们可以使用cargo test
继续。
在没有Marine测试套件的设置中,greeting
函数将被编译为本地版本,然后进行本地测试。相比之下,套件将将其编译为Wasm,加载到Marine中,然后才作为Wasm模块调用。
更多详细信息可以在Marine书籍的本章中找到。
文档
仓库结构
- crates
- macro-build-rs-generator - 生成
build.rs
文件的生成器,旨在为生成的粘合代码提供IDE支持 - marine-test-macro-impl -
#[marine_test]
宏的实际实现 - marine-test-macro -
#[marine_test]
宏的proc-macro crate
- macro-build-rs-generator - 生成
- src - 重新导出所有预期由最终用户使用的东西
支持
如果您发现错误,请提交问题。您还可以通过Discord或Telegram联系我们。我们将尽力尽快解决问题。
贡献
任何感兴趣的人都可以为项目做出贡献。请确保您已阅读并遵循一些基本的规则。
许可证
所有软件代码均为(c) Fluence Labs, Inc.所有,受Apache-2.0许可证的版权保护。
依赖项
~37–52MB
~884K SLoC