Kiểm Tra Hoàn Chỉnh
tests/error_test.rs
use litesvm::LiteSVM;use solana_sdk::{signature::{Keypair, Signer},system_instruction,transaction::Transaction,};use solana_transaction_error::TransactionError;#[test]fn test_insufficient_funds_error() {let mut svm = LiteSVM::new();let alice = Keypair::new();let bob = Keypair::new();// Give Alice only 0.5 SOLsvm.airdrop(&alice.pubkey(), 500_000_000).unwrap();// Try to transfer 1 SOL (should fail)let transfer_ix = system_instruction::transfer(&alice.pubkey(),&bob.pubkey(),1_000_000_000, // More than Alice has);let tx = Transaction::new_signed_with_payer(&[transfer_ix],Some(&alice.pubkey()),&[&alice],svm.latest_blockhash(),);// Verify it fails with expected errorlet result = svm.send_transaction(tx);assert!(result.is_err());let err = result.unwrap_err();match err.err {TransactionError::InstructionError(0, _) => {println!("Got expected error: InstructionError (insufficient funds)");}_ => panic!("Got unexpected error: {:?}", err.err),}// Verify no funds were transferredassert_eq!(svm.get_balance(&bob.pubkey()).unwrap_or(0), 0);}
Kiểm Tra Các Loại Lỗi Khác Nhau
Tài Khoản Không Hợp Lệ
#[test]fn test_account_not_found() {let mut svm = LiteSVM::new();let non_existent = Pubkey::new_unique();// This should return Noneassert!(svm.get_account(&non_existent).is_none());}
Lỗi Chương Trình Tùy Chỉnh
#[test]fn test_custom_program_error() {let mut svm = LiteSVM::new();// Deploy program and trigger custom errorlet result = svm.send_transaction(tx);if let Err(e) = result {match e.err {TransactionError::InstructionError(_, InstructionError::Custom(code)) => {assert_eq!(code, YOUR_ERROR_CODE);}_ => panic!("Expected custom error"),}}}
Những Điểm Chính
- Xác Nhận Lỗi: Sử dụng
assert!(result.is_err())để xác minh lỗi xảy ra - Khớp Lỗi: Khớp với các loại lỗi cụ thể để đảm bảo xử lý lỗi đúng cách
- Xác Minh Trạng Thái: Xác minh trạng thái không thay đổi khi lỗi xảy ra
- Lỗi Tùy Chỉnh: Kiểm tra các mã lỗi tùy chỉnh của chương trình
- Trường Hợp Ngoại Lệ: Kiểm tra các điều kiện biên và đầu vào không hợp lệ
Is this page helpful?