rust-testing
Faz seu agente criar testes para código Rust. Ele verifica se as partes do programa funcionam sozinhas ou juntas, e testa cenários variados.
O que ela faz
Este código ajuda a criar e organizar testes para programas escritos na linguagem Rust. Ele ensina como verificar se o seu código funciona corretamente, seguindo um método chamado TDD (Desenvolvimento Guiado por Testes).
Quando usar
- ✓Ao escrever novas partes do seu código Rust.
- ✓Ao adicionar verificações de qualidade ao código já existente.
- ✓Ao querer garantir que seu código funciona com diferentes tipos de entrada.
Exemplo do que pedir para a IA
“Como posso testar se a minha função que soma números funciona corretamente em Rust?”
Quer saber mais? Abra as seções abaixo.
Como usar
O jeito mais fácil: copie a mensagem abaixo e cole no Claude, ChatGPT, Cursor ou outra IA. Ela lê a skill e segue as instruções.
Link da skill
Mensagem pronta para colar
Como funciona
Ele funciona guiando você a escrever um teste que falha primeiro, depois escrever o código mínimo para fazê-lo passar, e então refatorar. Isso garante que o código está correto e bem escrito.
Instalação
Jeito mais fácil: copie o link da skill e cole no Claude, ChatGPT ou Cursor pedindo para seguir as instruções.
No terminal (Claude Code, Codex, Cursor), na pasta do projeto:
npx skills add affaan-m/ECC --skill rust-testingOu baixe só o arquivo:
curl -L https://raw.githubusercontent.com/affaan-m/ECC/main/pi/core/skills/rust-testing/SKILL.md -o SKILL.mdConteúdo técnico (SKILL.md)
Tradução do texto original do autor no GitHub. Os comandos e códigos estão como no original.
Padrões de Teste em Rust
Padrões abrangentes de teste em Rust para escrever testes confiáveis e de fácil manutenção, seguindo a metodologia TDD.
Quando Usar
- Escrevendo novas funções, métodos ou traits em Rust
- Adicionando cobertura de testes a código existente
- Criando benchmarks para código crítico de performance
- Implementando testes baseados em propriedades para validação de entrada
- Seguindo o fluxo de trabalho TDD em projetos Rust
Como Funciona
- Identifique o código alvo — Encontre a função, trait ou módulo a ser testado
- Escreva um teste — Use
#[test]em um módulo#[cfg(test)], rstest para testes parametrizados, ou proptest para testes baseados em propriedades - Mock de dependências — Use mockall para isolar a unidade sob teste
- Execute os testes (VERMELHO) — Verifique se o teste falha com o erro esperado
- Implemente (VERDE) — Escreva o código mínimo para passar
- Refatore — Melhore mantendo os testes verdes
- Verifique a cobertura — Use cargo-llvm-cov, mire em 80%+
Fluxo de Trabalho TDD para Rust
O Ciclo VERMELHO-VERDE-REFACTOR
RED → Write a failing test first
GREEN → Write minimal code to pass the test
REFACTOR → Improve code while keeping tests green
REPEAT → Continue with next requirement
TDD Passo a Passo em Rust
// RED: Write test first, use todo!() as placeholder
pub fn add(a: i32, b: i32) -> i32 { todo!() }
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add() { assert_eq!(add(2, 3), 5); }
}
// cargo test → panics at 'not yet implemented'
// GREEN: Replace todo!() with minimal implementation
pub fn add(a: i32, b: i32) -> i32 { a + b }
// cargo test → PASS, then REFACTOR while keeping tests green
Testes de Unidade
Organização de Testes em Nível de Módulo
// src/user.rs
pub struct User {
pub name: String,
pub email: String,
}
impl User {
pub fn new(name: impl Into<String>, email: impl Into<String>) -> Result<Self, String> {
let email = email.into();
if !email.contains('@') {
return Err(format!("invalid email: {email}"));
}
Ok(Self { name: name.into(), email })
}
pub fn display_name(&self) -> &str {
&self.name
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn creates_user_with_valid_email() {
let user = User::new("Alice", "alice@example.com").unwrap();
assert_eq!(user.display_name(), "Alice");
assert_eq!(user.email, "alice@example.com");
}
#[test]
fn rejects_invalid_email() {
let result = User::new("Bob", "not-an-email");
assert!(result.is_err());
assert!(result.unwrap_err().contains("invalid email"));
}
}
Macros de Assertiva
assert_eq!(2 + 2, 4); // Equality
assert_ne!(2 + 2, 5); // Inequality
assert!(vec![1, 2, 3].contains(&2)); // Boolean
assert_eq!(value, 42, "expected 42 but got {value}"); // Custom message
assert!((0.1_f64 + 0.2 - 0.3).abs() < f64::EPSILON); // Float comparison
Testes de Erro e Pânico
Testando Retornos de Result
#[test]
fn parse_returns_error_for_invalid_input() {
let result = parse_config("}{invalid");
assert!(result.is_err());
// Assert specific error variant
let err = result.unwrap_err();
assert!(matches!(err, ConfigError::ParseError(_)));
}
#[test]
fn parse_succeeds_for_valid_input() -> Result<(), Box<dyn std::error::Error>> {
let config = parse_config(r#"{"port": 8080}"#)?;
assert_eq!(config.port, 8080);
Ok(()) // Test fails if any ? returns Err
}
Testando Pânicos
#[test]
#[should_panic]
fn panics_on_empty_input() {
process(&[]);
}
#[test]
#[should_panic(expected = "index out of bounds")]
fn panics_with_specific_message() {
let v: Vec<i32> = vec![];
let _ = v[0];
}
Testes de Integração
Estrutura de Arquivos
my_crate/
├── src/
│ └── lib.rs
├── tests/ # Integration tests
│ ├── api_test.rs # Each file is a separate test binary
│ ├── db_test.rs
│ └── common/ # Shared test utilities
│ └── mod.rs
Escrevendo Testes de Integração
// tests/api_test.rs
use my_crate::{App, Config};
#[test]
fn full_request_lifecycle() {
let config = Config::test_default();
let app = App::new(config);
let response = app.handle_request("/health");
assert_eq!(response.status, 200);
assert_eq!(response.body, "OK");
}
Testes Assíncronos
Com Tokio
#[tokio::test]
…
Perguntas frequentes
O que é TDD?
TDD significa Desenvolvimento Guiado por Testes. É uma técnica onde você escreve um teste antes de escrever o código real. O teste falha, você escreve o código para fazê-lo passar, e depois melhora o código.
O que são testes unitários?
Testes unitários verificam pequenas partes isoladas do seu código, como uma única função ou método, para garantir que elas funcionam como esperado.
O que são testes de integração?
Testes de integração verificam como diferentes partes do seu código funcionam juntas. Eles testam o sistema como um todo ou grandes componentes.
Detalhes
Descrição original do autor
Rust testing patterns including unit tests, integration tests, async testing, property-based testing, mocking, and coverage. Follows TDD methodology. Use when writing Rust tests — unit, integration, async, property-based, or coverage.
repo: affaan-m/ECC
Popularidade
- Estrelas no GitHub
- 280 mil
- Posição no ranking
- #118
- Licença
- MIT
- Atualizada em
- 15/10/2026
Comentários
- …
Mais skills deste repositório
accessibility
Ajuda seu agente a criar interfaces que todos possam usar. Garante que sites e aplicativos funcionem bem para pessoas com deficiência, como cegos ou com mobilidade reduzida.
affaan-m/ECC
agent-architecture-audit
Faz seu agente verificar se tudo está funcionando corretamente. Ele encontra e conserta problemas em sistemas de IA, garantindo que funcionem como esperado.
affaan-m/ECC
agent-eval
Ajuda seu agente a comparar diferentes ferramentas de programação de IA. Ele mede qual é mais rápido, barato e confiável para realizar tarefas específicas.
affaan-m/ECC
agent-harness-construction
Faz seu agente entender melhor como realizar tarefas. Ele otimiza as ferramentas e instruções que o agente usa para aumentar suas chances de sucesso.
affaan-m/ECC
Skills parecidas
webapp-testing
Permite testar aplicações web locais, verificar funcionalidades e depurar o comportamento da interface. Captura screenshots e logs do navegador.
anthropics/skills
ponytail-audit
Faz uma auditoria completa do código. Ele encontra bugs, falhas de segurança, código lento e sugere o que remover ou melhorar.
DietrichGebert/ponytail
ponytail-review
Revisa a qualidade de uma mudança no código. Verifica se a lógica está correta, se é segura, rápida e se todas as linhas são necessárias.
DietrichGebert/ponytail