Skip to content
Latchkey

cargo-nextest vs cargo test: Test Runners de Rust

Escolha o cargo test pelo runner integrado sem instalação, que cobre todos os tipos de teste incluindo doctests; escolha o cargo-nextest para execuções paralelas mais rápidas, isolamento por processo por teste, retries e melhor relatório no CI.

cargo test é o test runner integrado do Rust: ele compila e executa testes unitários, de integração e de documentação sem ferramentas extras. cargo-nextest é um runner de terceiros que rearquiteta a execução de testes: ele executa cada teste em seu próprio processo para isolamento, paraleliza de forma agressiva e adiciona recursos amigáveis para CI como retries, particionamento e saída mais clara. Eles são complementares, já que o nextest não executa doctests.

cargo-nextestcargo test
InstalaçãoSeparada (cargo install/binstall)Integrada ao Cargo
ExecuçãoUm processo por testeThreads dentro de um binário
VelocidadeFrequentemente mais rápida em suítes grandesBaseline
DoctestsNão executados (use cargo test)Sim
Recursos de CIRetries, particionamento, saída JUnitSaída básica
SaídaConcisa, status por testeSaída padrão do libtest

Onde cada um realmente se destaca

O cargo test se destaca por não exigir setup e por sua completude: ele está sempre disponível e é o único que executa doctests. O cargo-nextest se destaca em suítes grandes e no CI: o isolamento por processo por teste evita que um teste contamine o estado de outro, ele paraleliza bem, e recursos como retries automáticos para testes flaky conhecidos, particionamento de testes entre runners e saída JUnit XML tornam o CI mais rápido e fácil de ler.

No CI

Em suítes de teste grandes, o paralelismo e o particionamento do nextest podem dividir os testes entre múltiplos runners e reduzir o tempo total, e sua saída JUnit se conecta ao relatório de testes do CI. Um padrão comum é executar cargo nextest run para testes unitários/de integração e cargo test --doc separadamente para doctests, obtendo a velocidade do nextest sem perder a cobertura de doctests.

Ressalvas honestas

O nextest é uma dependência extra a instalar e fixar, e como ele pula doctests você ainda precisa do cargo test para esses. O isolamento por processo por teste é ótimo para correção, mas tem overhead de criação de processos, então em suítes muito pequenas o runner integrado pode ser igualmente rápido. Para a maioria dos projetos grandes, os ganhos do nextest superam isso.

O veredito

Use o cargo test para projetos pequenos e para executar doctests. Use o cargo-nextest para suítes grandes no CI, onde paralelismo, isolamento, retries e relatório JUnit compensam, e mantenha uma etapa separada de doctest.

Guias relacionados