Tilin olemassaolo
Tarkista, ovatko tilit olemassa tai onko ne suljettu.
Väite: Tili on olemassa
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());}
Väite: Tili on suljettu
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 hyväksyy, kun tili joko ei ole olemassa, sillä on
nolla lamports, tai sen data on tyhjä. Käytä tätä varmistaaksesi siivous
tilien sulkemisen jälkeen.
Saldoväitteet
Tarkista SOL- ja token-saldot.
Väite: 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);}
Väite: Token-saldo
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);}
Väite: Mintin tarjonta
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);}
Tilin ominaisuudet
Tarkista tilin omistajuus ja dataominaisuudet.
Väite: Tilin omistaja
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());}
Väite: Tilin datapituus
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);}
Yleiset tilimäärät: - Mint Account: 82 tavua - token account: 165 tavua - System Account: 0 tavua (pelkät lamports)
Täydellinen esimerkki
Tässä on kattava testi, joka havainnollistaa useita assertioita:
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!");}
Assertiovirheiden käsittely
Kun assertio epäonnistuu, se aiheuttaa paniikin kuvaavalla virheilmoituksella:
// 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
Assertiot on suunniteltu epäonnistumaan nopeasti selkeillä virheilmoituksilla. Käytä niitä runsaasti testeissäsi ongelmien havaitsemiseksi varhain.
Is this page helpful?