Testando Rust do zero: como não enlouquecer e escrever o primeiro teste

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Por que testar em Rust não é assustador, mas sim interessante?

\n\n

Quando 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\n

Muitos 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\n

Neste 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\n

O que você precisa saber antes de começar?

\n\n

Antes de escrever testes, certifique-se de ter o Rust instalado. Se não tiver, abra o terminal e execute:

\n\n
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
\n\n

Tudo 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\n

Vamos criar um novo projeto para experimentos:

\n\n
cargo new rust_test_guide\ncd rust_test_guide
\n\n

Ótimo! Agora temos um projeto limpo onde vamos aprender a escrever testes.

\n\n

Primeiro teste: entendendo com um exemplo

\n\n

Abra o arquivo src/lib.rs. Por padrão, ele está vazio, mas vamos adicionar uma função simples e um teste para ela.

\n\n

Vamos escrever uma função que verifica se um número é par:

\n\n
pub 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\n

Vamos 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ção is_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
\n\n

Execute o teste com o comando:

\n\n
cargo test
\n\n

Se tudo estiver correto, você verá uma saída verde:

\n\n
running 1 test\ntest tests::test_is_even ... ok\n\ntest result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
\n\n

Parabéns, você escreveu seu primeiro teste em Rust! Agora vamos entender como escrever verificações mais significativas.

\n\n

Principais macros para teste

\n\n

Nos 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
\n\n

Exemplo de uso das três macros:

\n\n
pub 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\n

Observe: assert! aceita uma expressão booleana, e

Blogs

Book Recommendations