#traits #cosmwasm #runner #contracts #robot #integration #set

cw-it

用于集成测试CosmWasm智能合约的实用工具包

34 个版本

0.4.0-rc.9 2024年8月23日
0.4.0-rc.22024年7月18日
0.3.1 2024年3月7日
0.3.0-rc.12023年11月8日
0.1.0 2023年7月21日

#222 in 神奇豆子

Download history 461/week @ 2024-05-03 367/week @ 2024-05-10 56/week @ 2024-05-17 112/week @ 2024-05-24 267/week @ 2024-05-31 96/week @ 2024-06-07 78/week @ 2024-06-14 289/week @ 2024-06-21 337/week @ 2024-06-28 165/week @ 2024-07-05 121/week @ 2024-07-12 108/week @ 2024-07-19 217/week @ 2024-07-26 430/week @ 2024-08-02 159/week @ 2024-08-09 716/week @ 2024-08-16

1,539 每月下载量
9 crate 中使用

MPL-2.0 和可能 GPL-3.0-only

6MB
5K SLoC

CosmWasm集成测试

用于集成测试CosmWasm智能合约的实用工具包。

注意:此工具包仍处于早期开发阶段,API可能发生变化。

关于

此工具包的主要思想是提供一套“测试运行器”,您可以运行相同的一组测试。这是通过提供不同的结构体来实现的,这些结构体都实现了CwItRunner 特性。此特性基于test-tube 中的 Runner 特性,但增加了一些额外功能。

此工具包还包括一个 TestRobot 特性和一组“测试机器人”,这些是实现了 TestRobot 特性的结构体,有助于您实现机器人测试模式。本质上,这些是具有执行操作或进行断言的函数的结构体,然后返回 self,以便您可以链式调用它们。

可用的功能和测试运行器

此工具包有以下可选功能

  • osmosis
  • astroport
    • 导出包含 AstroportTestRobot 特性的 astroport 模块。您可以在结构体上实现此特性,以便访问用于针对 Astroport 池进行测试的一组辅助函数。
  • rpc_runner
  • multi-test
    • 导出包含 MultiTestRunner 结构体的 multi_test 模块。该结构体实现了 CwItRunner 特性,并允许您针对 apollo-cw-multi-test 实例(这是 cw-multi-test 的分支版本,其中包含对 CwItRunner 的修改)运行测试。与 OsmosisTestApp 相比,针对 cw-multi-test 运行测试非常有用,如果您需要运行调试器或检查代码覆盖率。
  • astroport-multi-test
    • astroport 模块中导出了一些实用函数,这些函数可以帮助您使用 cw-multi-test 实例化 Astroport。
  • chain-download
    • 此功能使 ChainCodeIdChainContractAddress 变体在 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