34 个版本
新 0.4.0-rc.9 | 2024年8月23日 |
---|---|
0.4.0-rc.2 | 2024年7月18日 |
0.3.1 | 2024年3月7日 |
0.3.0-rc.1 | 2023年11月8日 |
0.1.0 | 2023年7月21日 |
#222 in 神奇豆子
1,539 每月下载量
在 9 crate 中使用
6MB
5K SLoC
CosmWasm集成测试
用于集成测试CosmWasm智能合约的实用工具包。
注意:此工具包仍处于早期开发阶段,API可能发生变化。
关于
此工具包的主要思想是提供一套“测试运行器”,您可以运行相同的一组测试。这是通过提供不同的结构体来实现的,这些结构体都实现了CwItRunner 特性。此特性基于test-tube 中的 Runner
特性,但增加了一些额外功能。
此工具包还包括一个 TestRobot 特性和一组“测试机器人”,这些是实现了 TestRobot
特性的结构体,有助于您实现机器人测试模式。本质上,这些是具有执行操作或进行断言的函数的结构体,然后返回 self
,以便您可以链式调用它们。
可用的功能和测试运行器
此工具包有以下可选功能
osmosis
- 导出包含实现 CwItRunner 特性的 osmosis 模块,并将其用于 OsmosisTestApp 结构体,该结构体位于 osmosis-test-tube。
- 此模块还包含 OsmosisTestRobot 特性。您可以在结构体上实现此特性,以便访问用于针对 Osmosis 池进行测试的一组辅助函数。
astroport
- 导出包含
AstroportTestRobot
特性的 astroport 模块。您可以在结构体上实现此特性,以便访问用于针对 Astroport 池进行测试的一组辅助函数。
- 导出包含
rpc_runner
- 导出包含 RpcRunner 结构体的 rpc_runner 模块。该结构体实现了 CwItRunner 特性,允许您针对 RPC 节点运行测试。
multi-test
- 导出包含 MultiTestRunner 结构体的 multi_test 模块。该结构体实现了 CwItRunner 特性,并允许您针对 apollo-cw-multi-test 实例(这是 cw-multi-test 的分支版本,其中包含对 CwItRunner 的修改)运行测试。与
OsmosisTestApp
相比,针对cw-multi-test
运行测试非常有用,如果您需要运行调试器或检查代码覆盖率。
- 导出包含 MultiTestRunner 结构体的 multi_test 模块。该结构体实现了 CwItRunner 特性,并允许您针对 apollo-cw-multi-test 实例(这是 cw-multi-test 的分支版本,其中包含对 CwItRunner 的修改)运行测试。与
astroport-multi-test
- 在
astroport
模块中导出了一些实用函数,这些函数可以帮助您使用cw-multi-test
实例化 Astroport。
- 在
chain-download
- 此功能使
ChainCodeId
和ChainContractAddress
变体在Artifact
枚举中可用。这允许您通过提供代码 ID 或合约地址从 RPC 节点下载合约的 wasm 文件。如果您想在链上已部署的合约上本地运行测试,这将非常有用。
- 此功能使
使用方法
将以下内容添加到您的 Cargo.toml
[dev-dependencies]
cw-it = "0.1.0"
根据您的需求,您应该添加上述提到的一个或多个功能,例如
[dev-dependencies]
cw-it = { version = "0.1.0", features = ["osmosis"] }
然后您可以编写如下所示的测试
struct TestingRobot<'a>(&'a TestRunner);
impl<'a> OsmosisTestRobot<'a> for TestingRobot<'a> {}
pub const TEST_RUNNER: &str = "osmosis-test-app";
#[test]
fn test_my_contract() {
let runner = TestRunner::from_str(TEST_RUNNER).unwrap();
let robot = TestingRobot(&runner);
robot
.swap_exact_amount_in(
&account2,
pool_id,
Coin::new(swap_amount, "uosmo"),
"uatom",
None,
)
.assert_native_token_balance_eq(
// We should have swapped swap_amount of our uosmo
account2.address(),
"uosmo",
initial_balance - swap_amount - GAS_AMOUNT,
)
.assert_native_token_balance_gt(
// We should have more than the initial balance
account2.address(),
"uatom",
initial_balance,
)
.assert_native_token_balance_lt(
// But less than the initial balance + swap amount due to slippage and a balanced pool
account2.address(),
"uatom",
initial_balance + swap_amount,
);
}
在这里,您可以看到我们首先创建了一个测试机器人结构体,然后在其上实现相关特性以获取一些有用的辅助函数。然后我们创建了一个 TestRunner
结构体并将其传递给机器人。然后机器人使用运行器执行操作和断言。
依赖关系
~26–42MB
~761K SLoC