Kurulum
Gerekli tüm bağımlılıklara sahip olduğunuzdan emin olun:
cargo add --dev litesvm litesvm-utils
litesvm-utils Nedir?
litesvm-utils crate'i, Solana program testlerini basitleştiren temel yardımcı
trait'ler ve araçlar sağlar. Ergonomik API'lar sayesinde yaygın test
şablonlarını 30'dan fazla satırdan sade ve okunabilir koda indirger.
TestHelpers Trait
- Tek bir metot çağrısıyla fonlanmış hesaplar oluşturun
- Token mint'leri ve token account'ları kolayca kurun
- Gereksiz kod tekrarı olmadan PDA'lar türetin
- Zamana dayalı testler için slot'ları yönetin
AssertionHelpers Trait - Hesap durumlarını doğrulayın (mevcut, kapalı, sahip) - Token bakiyelerini ve mint arzlarını kontrol edin - SOL bakiyelerini kontrol edin - Hesap veri uzunluklarını doğrulayın
TransactionHelpers Trait - Zengin sonuç işleme ile talimatları çalıştırın
- İşlem başarısını veya başarısızlığını doğrulayın - Belirli hata kodlarını kontrol edin - İşlem günlüklerini ve hesaplama birimlerini inceleyin
LiteSVMBuilder - Test ortamı kurulumu için akıcı builder deseni - Metot zinciriyle program dağıtın - Kullanışlı statik fabrika metodları
Hızlı Örnek
İşte litesvm-utils'in gücünü gösteren eksiksiz bir örnek:
use litesvm_utils::{AssertionHelpers, LiteSVM, Signer, TestHelpers, TransactionHelpers};use solana_sdk::{native_token::LAMPORTS_PER_SOL, system_instruction};#[test]fn test_with_utils() {let mut svm = LiteSVM::new();// Create funded accounts in one linelet alice = svm.create_funded_account(10 * LAMPORTS_PER_SOL).unwrap();let bob = svm.create_funded_account(0).unwrap();// Create a token mint easilylet mint = svm.create_token_mint(&alice, 9).unwrap();// Create associated token accounts (returns Pubkey)let alice_ata = svm.create_associated_token_account(&mint.pubkey(), &alice).unwrap();let bob_ata = svm.create_associated_token_account(&mint.pubkey(), &bob).unwrap();// Mint tokenssvm.mint_to(&mint.pubkey(), &alice_ata, &alice, 1000).unwrap();// Assert balancessvm.assert_token_balance(&alice_ata, 1000);svm.assert_token_balance(&bob_ata, 0);// Execute a SOL transfer with rich result handlinglet transfer_ix = system_instruction::transfer(&alice.pubkey(),&bob.pubkey(),LAMPORTS_PER_SOL,);let result = svm.send_instruction(transfer_ix, &[&alice]).unwrap();result.assert_success();// Verify the transfersvm.assert_sol_balance(&bob.pubkey(), LAMPORTS_PER_SOL);}
Temel Avantajlar
litesvm-utils Öncesi
// Creating a funded account manuallylet keypair = Keypair::new();let airdrop_tx = Transaction::new_signed_with_payer(&[system_instruction::transfer(&payer.pubkey(),&keypair.pubkey(),lamports,)],Some(&payer.pubkey()),&[&payer],svm.latest_blockhash(),);svm.send_transaction(airdrop_tx).unwrap();
litesvm-utils Sonrası
// One line to create a funded accountlet keypair = svm.create_funded_account(lamports).unwrap();
Trait Genel Bakış
TestHelpers
| Yöntem | Döndürür | Açıklama |
|---|---|---|
create_funded_account(lamports) | Result<Keypair> | Bir keypair oluşturur ve fonlar |
create_funded_accounts(count, lamports) | Result<Vec<Keypair>> | Birden fazla fonlu keypair oluşturur |
create_token_mint(authority, decimals) | Result<Keypair> | Bir SPL token mint'i oluşturur |
create_token_account(mint, owner) | Result<Keypair> | Normal bir token account oluşturur |
create_associated_token_account(mint, owner) | Result<Pubkey> | Bir ATA oluşturur, adresini döndürür |
mint_to(mint, account, authority, amount) | Result<()> | Bir hesaba token basar |
derive_pda(seeds, program_id) | (Pubkey, u8) | bump seed ile bir PDA türetir |
get_pda(seeds, program_id) | Pubkey | Yalnızca PDA adresini alır |
get_pda_with_bump(seeds, program_id) | (Pubkey, u8) | derive_pda için takma ad |
get_current_slot() | u64 | Mevcut slot'u döndürür |
advance_slot(slots) | () | Zamanı N slot ilerletir |
AssertionHelpers
| Yöntem | Açıklama |
|---|---|
assert_account_exists(pubkey) | Hesap mevcut değilse hata fırlatır |
assert_account_closed(pubkey) | Hesap mevcut ve veri/lamport içeriyorsa hata fırlatır |
assert_token_balance(account, amount) | Token bakiyesini doğrular |
assert_sol_balance(pubkey, lamports) | SOL bakiyesini doğrular |
assert_mint_supply(mint, supply) | Mint toplam arzını doğrular |
assert_account_owner(pubkey, owner) | Hesap sahibini doğrular |
assert_account_data_len(pubkey, len) | Veri uzunluğunu doğrular |
TransactionHelpers
| Yöntem | Döndürür | Açıklama |
|---|---|---|
send_instruction(ix, signers) | Result<TransactionResult, TransactionError> | Tek bir talimat gönderir |
send_instructions(ixs, signers) | Result<TransactionResult, TransactionError> | Birden fazla talimatı tek tx'te gönderir |
send_transaction_result(tx) | Result<TransactionResult, TransactionError> | Ham bir Transaction gönderir |
Sorun Giderme
Yaygın Hatalar
| Hata | Neden | Çözüm |
|---|---|---|
AccountNotFound | Var olmayan bir hesap kullanmaya çalışılıyor | Önce create_funded_account kullanın |
InsufficientFunds | İşlem için yeterli lamport yok | Başlangıç fonlama miktarını artırın |
OwnerMismatch | Hesap yanlış programa ait | Doğru program kimliğini doğrulayın |
AssertionFailed | Bakiye veya durum beklenenle eşleşmiyor | Test mantığınızı kontrol edin |
Is this page helpful?