وجود الحساب
تحقق مما إذا كانت الحسابات موجودة أو تم إغلاقها.
التأكد من وجود الحساب
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_account_exists() {let mut svm = LiteSVM::new();let alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();// This will pass - account existssvm.assert_account_exists(&alice.pubkey());}
التأكد من إغلاق الحساب
use litesvm_utils::{AssertionHelpers, LiteSVM, Pubkey};#[test]fn test_assert_account_closed() {let mut svm = LiteSVM::new();// A random pubkey that was never createdlet nonexistent = Pubkey::new_unique();// This will pass - account doesn't existsvm.assert_account_closed(&nonexistent);}
assert_account_closed ينجح عندما لا يكون الحساب موجوداً، أو يحتوي على صفر
lamports، أو تكون بياناته فارغة. استخدم هذا للتحقق من عملية التنظيف بعد إغلاق
الحسابات.
تأكيدات الرصيد
تحقق من أرصدة SOL والرموز المميزة.
التأكد من رصيد SOL
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_sol_balance() {let mut svm = LiteSVM::new();let alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();// Verify Alice has 10 SOLsvm.assert_sol_balance(&alice.pubkey(), 10 * LAMPORTS_PER_SOL);}
التأكد من رصيد الرمز المميز
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_token_balance() {let mut svm = LiteSVM::new();let authority = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let user = svm.create_funded_account(5 * LAMPORTS_PER_SOL).unwrap();// Create mint and token accountlet mint = svm.create_token_mint(&authority, 9).unwrap();let user_ata = svm.create_associated_token_account(&mint.pubkey(), &user).unwrap();// Mint tokenssvm.mint_to(&mint.pubkey(), &user_ata, &authority, 5000).unwrap();// Verify balancesvm.assert_token_balance(&user_ata, 5000);}
التأكد من إجمالي إصدار العملة
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_mint_supply() {let mut svm = LiteSVM::new();let authority = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let user1 = svm.create_funded_account(5 * LAMPORTS_PER_SOL).unwrap();let user2 = svm.create_funded_account(5 * LAMPORTS_PER_SOL).unwrap();// Create mint (returns Keypair)let mint = svm.create_token_mint(&authority, 9).unwrap();// Create ATAs and mint tokenslet user1_ata = svm.create_associated_token_account(&mint.pubkey(), &user1).unwrap();let user2_ata = svm.create_associated_token_account(&mint.pubkey(), &user2).unwrap();svm.mint_to(&mint.pubkey(), &user1_ata, &authority, 1000).unwrap();svm.mint_to(&mint.pubkey(), &user2_ata, &authority, 2000).unwrap();// Verify total supplysvm.assert_mint_supply(&mint.pubkey(), 3000);}
خصائص الحساب
تحقق من ملكية الحساب وخصائص البيانات.
التأكد من مالك الحساب
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::{native_token::LAMPORTS_PER_SOL, system_program};#[test]fn test_assert_account_owner() {let mut svm = LiteSVM::new();let alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();// Regular accounts are owned by the System Programsvm.assert_account_owner(&alice.pubkey(), &system_program::id());}
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_token_account_owner() {let mut svm = LiteSVM::new();let authority = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let user = svm.create_funded_account(5 * LAMPORTS_PER_SOL).unwrap();let mint = svm.create_token_mint(&authority, 9).unwrap();let user_ata = svm.create_associated_token_account(&mint.pubkey(), &user).unwrap();// Token accounts are owned by the Token Programsvm.assert_account_owner(&user_ata, &spl_token::id());}
التأكد من طول بيانات الحساب
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers};use solana_sdk::native_token::LAMPORTS_PER_SOL;#[test]fn test_assert_account_data_len() {let mut svm = LiteSVM::new();let authority = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let user = svm.create_funded_account(5 * LAMPORTS_PER_SOL).unwrap();let mint = svm.create_token_mint(&authority, 9).unwrap();let user_ata = svm.create_associated_token_account(&mint.pubkey(), &user).unwrap();// Token mint accounts are 82 bytessvm.assert_account_data_len(&mint.pubkey(), 82);// Token accounts are 165 bytessvm.assert_account_data_len(&user_ata, 165);}
أحجام الحسابات الشائعة: - حساب Mint: 82 بايت - token account: 165 بايت
- حساب النظام: 0 بايت (lamports فقط)
مثال كامل
إليك اختباراً شاملاً يوضح تأكيدات متعددة:
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers, TransactionHelpers};use solana_sdk::{native_token::LAMPORTS_PER_SOL, system_instruction};#[test]fn test_comprehensive_assertions() {let mut svm = LiteSVM::new();// Setuplet admin = svm.create_funded_account(100 * LAMPORTS_PER_SOL).unwrap();let alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let bob = svm.create_funded_account(0).unwrap();// Verify initial SOL balancessvm.assert_sol_balance(&admin.pubkey(), 100 * LAMPORTS_PER_SOL);svm.assert_sol_balance(&alice.pubkey(), 10 * LAMPORTS_PER_SOL);svm.assert_sol_balance(&bob.pubkey(), 0);// Transfer SOL from Alice to Boblet transfer_ix = system_instruction::transfer(&alice.pubkey(),&bob.pubkey(),5 * LAMPORTS_PER_SOL,);svm.send_instruction(transfer_ix, &[&alice]).unwrap().assert_success();// Verify balances after transfer (Alice paid fees too)svm.assert_sol_balance(&bob.pubkey(), 5 * LAMPORTS_PER_SOL);// Create token infrastructure (mint returns Keypair, ATAs return Pubkey)let mint = svm.create_token_mint(&admin, 6).unwrap();let alice_ata = svm.create_associated_token_account(&mint.pubkey(), &alice).unwrap();let bob_ata = svm.create_associated_token_account(&mint.pubkey(), &bob).unwrap();// Verify account propertiessvm.assert_account_exists(&mint.pubkey());svm.assert_account_exists(&alice_ata);svm.assert_account_owner(&mint.pubkey(), &spl_token::id());svm.assert_account_data_len(&mint.pubkey(), 82);svm.assert_account_data_len(&alice_ata, 165);// Mint and verifysvm.mint_to(&mint.pubkey(), &alice_ata, &admin, 1_000_000).unwrap();svm.mint_to(&mint.pubkey(), &bob_ata, &admin, 500_000).unwrap();svm.assert_token_balance(&alice_ata, 1_000_000);svm.assert_token_balance(&bob_ata, 500_000);svm.assert_mint_supply(&mint.pubkey(), 1_500_000);println!("All assertions passed!");}
التعامل مع إخفاقات التأكيد
عندما يفشل تأكيد ما، سيتوقف البرنامج فجأةً برسالة وصفية:
// This will panic with a message like:// "Expected token balance 1000, but got 500"svm.assert_token_balance(&some_ata, 1000); // when balance is actually 500
التأكيدات مصممة للفشل السريع مع رسائل خطأ واضحة. استخدمها بحرية في اختباراتك للكشف عن المشكلات مبكراً.
Is this page helpful?