You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 09:39:22