如何在ink!合约单元测试函数中设置调用方caller?
ink! 测试自定义调用方(caller)解决方案
在ink!的单元测试环境中,官方提供了直接修改执行上下文的工具方法,你只需要引入ink_env::test模块的对应方法即可实现自定义caller的需求:
具体修改方式
- 首先在测试模块引入
ink_env::test工具集 - 调用
set_caller方法设置你需要的调用方地址,再执行do_check调用即可
修改后的测试代码示例如下:
#[cfg(test)] mod tests { use super::*; use ink_lang as ink; // 引入测试环境操作工具 use ink_env::test; #[ink::test] fn do_check_works() { let mut test = Test::new(); // 方案1:使用ink!预设的测试账户 let test_accounts = test::default_accounts::<ink_env::DefaultEnvironment>(); // 把调用方设置为预设的bob账户,也可以替换为任意你需要的地址 test::set_caller::<ink_env::DefaultEnvironment>(test_accounts.bob); // 此时do_check内部获取的caller就是上面设置的bob地址 test.do_check(); // 后续测试校验逻辑... } }
补充说明
- 你也可以手动构造任意符合格式的
AccountId实例传入set_caller,不需要局限于预设的测试账户 set_caller的设置是全局生效的,每次切换调用方只需要在合约调用前重新执行该方法设置新地址即可
内容的提问来源于stack exchange,提问作者True
相关产品推荐
相关产品推荐

