设置基本测试
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-testing
pallet。这涉及以下代码部分的更改: -
将第一行替换为 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 中的测试