Por que testar em Rust não é assustador, mas sim interessante?
\n\nQuando você começa a estudar Rust, parece que o compilador já faz todo o trabalho pesado para você. Ele verifica a memória, monitora os empréstimos e não deixa você dar um tiro no próprio pé. Mas mesmo o compilador mais rigoroso não sabe verificar a lógica do programa. É aí que entra o teste.
\n\nMuitos iniciantes têm medo de testes. Eles acham que é uma perda de tempo, que precisam escrever um monte de código chato. Mas, na verdade, os testes são seu seguro. Eles ajudam a encontrar bugs mais rapidamente, refatorar código com confiança e dormir tranquilo após o lançamento.
\n\nNeste artigo, vamos abordar por onde começar a testar em Rust se você é iniciante. Sem enrolação — apenas prática, exemplos reais e dicas que serão úteis em projetos reais.
\n\nO que você precisa saber antes de começar?
\n\nAntes de escrever testes, certifique-se de ter o Rust instalado. Se não tiver, abra o terminal e execute:
\n\ncurl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh\n\nTudo o que precisamos já está integrado ao ecossistema. Não é necessário instalar frameworks adicionais. O Rust oferece um poderoso executor de testes embutido, que é iniciado com um único comando.
\n\nVamos criar um novo projeto para experimentos:
\n\ncargo new rust_test_guide\ncd rust_test_guide\n\nÓtimo! Agora temos um projeto limpo onde vamos aprender a escrever testes.
\n\nPrimeiro teste: entendendo com um exemplo
\n\nAbra o arquivo src/lib.rs. Por padrão, ele está vazio, mas vamos adicionar uma função simples e um teste para ela.
Vamos escrever uma função que verifica se um número é par:
\n\npub fn is_even(num: i32) -> bool {\n num % 2 == 0\n}\n\n#[cfg(test)]\nmod tests {\n use super::*;\n\n #[test]\n fn test_is_even() {\n assert_eq!(is_even(4), true);\n assert_eq!(is_even(7), false);\n }\n}\n\nVamos analisar o código parte por parte:
\n\n- \n
#[cfg(test)]— este atributo diz ao compilador: "Compile este módulo apenas ao executar testes". Ele não entrará na versão final. \n mod tests— criamos um módulo para os testes. Esta é uma prática padrão. \n use super::*;— importamos tudo o que foi declarado acima para que possamos ver nossa funçãois_even. \n #[test]— marcador que transforma uma função comum em um teste. \n assert_eq!— macro que verifica a igualdade de dois valores. Se não forem iguais, o teste falha. \n
Execute o teste com o comando:
\n\ncargo test\n\nSe tudo estiver correto, você verá uma saída verde:
\n\nrunning 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out\n\nParabéns, você escreveu seu primeiro teste em Rust! Agora vamos entender como escrever verificações mais significativas.
\n\nPrincipais macros para teste
\n\nNos testes, você usará constantemente três macros. Memorize-as:
\n\n- \n
assert!(expression)— verifica se a expressão é verdadeira. Se for falsa, o teste falha. \n assert_eq!(left, right)— verifica a igualdade de dois valores. Útil para comparar resultados. \n assert_ne!(left, right)— verifica se os valores não são iguais. \n
Exemplo de uso das três macros:
\n\npub fn add_two(x: i32) -> i32 {\n x + 2\n}\n\n#[cfg(test)]\nmod tests {\n use super::*;\n\n #[test]\n fn test_add_two() {\n assert!(add_two(3) == 5);\n assert_eq!(add_two(0), 2);\n assert_ne!(add_two(10), 13);\n }\n}\n\nObserve: assert! aceita uma expressão booleana, e