Médio Rust
Teste de integração para uma calculadora
Enunciado
Crie uma biblioteca com a função soma(a: i32, b: i32) -> i32 e um teste de integração no arquivo tests/integracao.rs que verifique se soma(10, 20) retorna 30.
Requisitos
- A função
somadeve estar emsrc/lib.rse ser pública. - O teste de integração deve estar em
tests/integracao.rs. - O teste deve usar
assert_eq!e chamarcalculadora::soma.
Código inicial
// src/lib.rs
pub fn soma(a: i32, b: i32) -> i32 {
// implemente
}
// tests/integracao.rs
// use calculadora::soma;
// #[test]
// fn testa_soma_integracao() {
// assert_eq!(soma(10, 20), 30);
// }
Saída esperada
running 1 test
test testa_soma_integracao ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
Ver dica
No arquivo de integração, importe a crate com use calculadora::soma; (o nome da crate é o nome do pacote).
Mostrar solução
// src/lib.rs
pub fn soma(a: i32, b: i32) -> i32 {
a + b // soma os dois números
}
// tests/integracao.rs
use calculadora::soma; // importa a função da biblioteca
#[test]
fn testa_soma_integracao() {
assert_eq!(soma(10, 20), 30); // verifica 10 + 20 = 30
}
Passo a passo
- Em
src/lib.rs, definimospub fn somapara que seja visível fora da crate. - Criamos o arquivo
tests/integracao.rsna raiz do projeto. - No teste de integração, usamos
use calculadora::soma;para acessar a função pública. - A função de teste é anotada com
#[test]. assert_eq!(soma(10, 20), 30)verifica o resultado.- O
cargo testcompila e executa tanto os testes unitários quanto os de integração.
Por que funciona
Testes de integração são compilados como crates separadas que dependem da sua biblioteca. Eles só podem acessar itens públicos, simulando o uso por um consumidor externo.
Erros comuns
- Esquecer
pubna funçãosoma: o teste de integração não consegue acessá-la. - Usar
use crate::soma;no teste de integração:cratese refere à própria crate de teste, não à biblioteca. O correto éuse calculadora::soma;. - Colocar o arquivo de integração em
src/em vez detests/: ocargo testnão o reconhece como teste de integração.
Outra forma de resolver
Poderia testar a função dentro do próprio src/lib.rs com um módulo tests, mas isso seria um teste unitário, não de integração.
Saída esperada
running 1 test
test testa_soma_integracao ... ok
test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out