Accountbestaan
Verifieer of accounts bestaan of zijn gesloten.
Assert Accountbestaan
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());}
Assert Account Gesloten
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 slaagt wanneer een account ofwel niet bestaat, nul
lamports heeft, of lege data heeft. Gebruik dit om opruiming na het sluiten
van accounts te verifiëren.
Saldo-assertions
Verifieer SOL- en tokenbalansen.
Assert SOL-saldo
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);}
Assert Tokensaldo
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);}
Assert Mint-voorraad
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);}
Accounteigenschappen
Verifieer accounteigendom en data-eigenschappen.
Assert Accounteigenaar
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());}
Assert Accountdatalengte
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);}
Gangbare accountgroottes: - Mint Account: 82 bytes - token account: 165 bytes - Systeemaccount: 0 bytes (alleen lamports)
Volledig Voorbeeld
Hier is een uitgebreide test die meerdere assertions demonstreert:
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!");}
Omgaan met Assertion-fouten
Wanneer een assertion mislukt, zal het paniekeren met een beschrijvend bericht:
// 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
Assertions zijn ontworpen om snel te falen met duidelijke foutmeldingen. Gebruik ze vrijelijk in je tests om problemen vroegtijdig op te sporen.
Is this page helpful?