Aula 12 - Testes e Documentação 🧪
Objetivo
Objetivo: Profissionalizar o desenvolvimento em Rust aprendendo a escrever testes robustos e documentação automática que serve como ferramenta de especificação.
1. Testes Unitários: Garantindo a Qualidade 🛡️
O Rust possui ferramentas de teste integradas. Os testes unitários ficam no mesmo arquivo do código, em um módulo especial.
pub fn soma(a: i32, b: i32) -> i32 {
a + b
}
#[cfg(test)] // Compila este módulo apenas ao rodar testes
mod tests {
use super::*; // Importa funções do arquivo pai
#[test]
fn test_soma() {
assert_eq!(soma(2, 2), 4);
}
}
Para rodar os testes:
2. Testes de Integração 🔗
Servem para testar sua biblioteca como um todo, como se você fosse um usuário externo. Ficam na pasta tests/ na raiz do projeto.
3. Documentação com rustdoc 📖
Rust usa comentários especiais (///) para gerar documentação HTML rica automaticamente.
/// Adiciona dois números e retorna a soma.
///
/// # Exemplos
///
/// ```
/// let resultado = meu_projeto::soma(2, 2);
/// assert_eq!(resultado, 4);
/// ```
pub fn soma(a: i32, b: i32) -> i32 {
a + b
}
Para gerar e abrir a documentação:
4. Testes Doc (Doc-tests) 🧪✨
Um dos recursos mais fantásticos do Rust: os exemplos de código na sua documentação são testados automaticamente pelo cargo test. Isso garante que sua documentação nunca fique desatualizada!
5. Visualização: Pirâmide de Testes no Rust 📐
graph TD
A["Testes Unitários (Muitos, rápidos, internos)"] --> B["Testes de Integração (Médios, externos)"]
B --> C["Doc-tests (Exemplos reais na documentação)"]
style A fill:#dfd
style C fill:#f9f
6. Mini-Projeto: Biblioteca de Utilidades Validada 📚
Crie um novo projeto de biblioteca (cargo new --lib minha_lib):
1. Implemente funções matemáticas simples.
2. Adicione documentação profissional com a seção # Exemplos.
3. Escreva testes unitários para cada função.
4. Crie um arquivo em tests/ para validar a integração das funções.
5. Gere a documentação e verifique se os exemplos estão renderizados corretamente.
7. Exercício de Fixação 🧠
- Qual a diferença de localização entre testes unitários e testes de integração?
- Para que serve o atributo
#[cfg(test)]? - Como o
rustdocajuda a manter o código e a documentação em sincronia?
Próxima Aula: Vamos encarar o desafio da Concorrência Segura! 🧵