如何在Anchor的Trdelnik测试中解析账户数据并验证状态更新
使用Trdelnik解析Anchor账户并验证状态更新
1. 导入必要类型
先确保导入Anchor的反序列化 trait,以及你程序中定义的账户结构体:
use anchor_lang::AccountDeserialize; use your_program::state::AuctionAccount; // 替换为你实际的账户结构体路径
2. 解析账户数据
通过AccountDeserialize提供的方法,把获取到的原始账户数据解析成自定义结构体:
// 解析已获取的账户数据 let parsed_account = AuctionAccount::try_deserialize(&mut account_state.data.as_slice())?;
3. 用eq!宏验证状态更新
直接对比解析后账户的字段值和预期结果,用eq!做断言:
// 示例:检查拍卖状态是否为Active eq!(parsed_account.status, AuctionStatus::Active); // 示例:检查当前最高出价是否符合预期 eq!(parsed_account.current_bid, 100_000_000);
完整代码示例
use anchor_lang::AccountDeserialize; use your_program::state::{AuctionAccount, AuctionStatus}; // 替换为你的实际类型 // 你已有的获取账户数据代码 let account_state = fixture .client .get_account(fixture.auction_account.pubkey()) .await? .unwrap(); // 解析账户 let parsed_account = AuctionAccount::try_deserialize(&mut account_state.data.as_slice())?; // 验证状态更新 eq!(parsed_account.status, AuctionStatus::Active); eq!(parsed_account.winner, fixture.bidder.pubkey()); // 检查中标者是否正确
注意点
- Anchor自动为程序中的账户结构体实现
AccountDeserialize,无需手动编写 try_deserialize解析失败会返回错误,记得用?处理eq!宏在测试断言失败时会直接panic,符合Trdelnik的测试逻辑
内容的提问来源于stack exchange,提问作者Fernando S. Kroes
相关产品推荐
相关产品推荐

