设置基本测试
Please read Substrate to Polkadot SDK page first.
学习如何设置编写 pallet 测试所需的脚手架。
本指南逐步介绍了如何使用 mock.rs 和 test.rs 作为测试 pallet 的基础。
我们将使用节点模板作为 mock.rs 文件的脚手架,以及一个名为 pallet-testing 的任意 pallet 来为本指南提供一些上下文。
此 pallet 将包含一个名为 add_value 的单个函数,该函数接受一个来源和一个 u32,如果该值小于或等于我们在模拟运行时中指定的名为 MaxValue 的常量,则返回 Ok(())。
使用模板节点作为样板
在 pallet-testing/src 内部,我们需要做的第一件事是创建两个空文件:mock.rs 和 tests.rs。
粘贴 template/src/mock.rs 中的内容。
我们将使用它作为我们将为 pallet-testing pallet 定制的样板。
创建模拟运行时以测试您的 pallet
- 首先修改
pallet-testing/src/mock.rs以包含pallet-testingpallet。这涉及以下代码部分的更改: -
将第一行替换为 pallet 的名称,在本例中为
pallet_testing:use crate as pallet_testing; /*--snip--*/
配置模拟运行时
-
在
frame_support::construct_runtime!中,将pallet_template替换为您的 pallet 的名称,在本例中为pallet_testing:/*--snip--*/ TestingPallet: pallet_testing::{Pallet, Call, Storage, Event<T>}, /*--snip--*/ -
为模拟运行时实现您的 pallet。将
impl pallet_template::Config for Test {...}替换为您的配置类型和 pallet 需要的任何常量值:parameter_types! { pub const MaxValue: u32 = 50; } impl pallet_testing::Config for Test { type RuntimeEvent = RuntimeEvent; type MaxValue = MaxValue; }
要使用模拟运行时,我们需要为 pallet-testing pallet 设置 tests.rs 文件。
设置和创建测试
在 tests.rs 中,首先使用 super 从 lib.rs 导入您需要的依赖项:
use super::*;-
测试错误是否按预期工作:
#[test] fn error_works(){ new_test_ext().execute_with(|| { assert_err!( TestingPallet::add_value(RuntimeOrigin::signed(1), 51), "value must be <= maximum add amount constant" ); }) } -
创建一个应该有效的测试:
#[test] fn test_should_work() { new_test_ext().execute_with(|| { assert_ok!( TestingPallet::add_value(RuntimeOrigin::signed(1), 10) ); }) } -
再创建一个应该失败的测试:
#[test] fn test_should_fail() { new_test_ext().execute_with(|| { assert_ok!( TestingPallet::add_value(RuntimeOrigin::signed(1), 100) ); }) }
运行您的测试
从您的 pallet 目录执行以下命令:
cargo test示例
pallet_template中的测试reward-coin示例 pallet 中的测试
