Configuração
Antes de testar seu programa, certifique-se de:
- Compile seu programa para gerar o arquivo
.so - Adicione
litesvmcomo dependência de desenvolvimento ao arquivoCargo.toml - Adicione quaisquer dependências de desenvolvimento adicionais que possam ser
necessárias, como
solana-sdkelitesvm-token - Crie um arquivo de teste no diretório
tests
Estrutura Básica de Teste de Programa
Aqui estão todos os passos básicos necessários para chamar e executar uma instrução em um programa Solana.
tests/program_test.rs
use litesvm::LiteSVM;use solana_sdk::{instruction::{AccountMeta, Instruction},pubkey::Pubkey,signature::{Keypair, Signer},transaction::Transaction,};use my_program;#[test]fn test_my_program() {// Initialize the test environmentlet mut svm = LiteSVM::new();// Deploy your program to the test environmentlet program_id = Pubkey::from(my_program::ID);let program_bytes = include_bytes!("../../../target/deploy/my_program.so");svm.add_program(program_id, program_bytes);// Create and fund test accountslet payer = Keypair::new();svm.airdrop(&payer.pubkey(), 10_000_000_000).unwrap();// Create your instructionlet instruction = Instruction {program_id,accounts: vec![AccountMeta::new(payer.pubkey(), true),],data: vec![],};// Build transactionlet tx = Transaction::new_signed_with_payer(&[instruction],Some(&payer.pubkey()),&[&payer],svm.latest_blockhash(),);// Send transactionlet result = svm.send_transaction(tx).unwrap();// Check transaction succeededprintln!("Transaction logs: {:?}", result.logs);println!("Program executed successfully!");}
O ambiente de teste padrão gerado com LiteSVM::new() inclui todos os recursos
de runtime habilitados, sysvars padrão, precompilações, programas spl, sigverify
e todos os programas integrados, como o System Program.
Se você quiser interagir com qualquer programa que não esteja incluído no ambiente de teste padrão, você deve implantar esse programa no ambiente de teste.
Próximos Passos
Na próxima seção, aprenderemos tudo sobre como implantar programas no ambiente de teste do litesvm.
Is this page helpful?