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-nextest | cargo test | |
|---|---|---|
| Instalação | Separada (cargo install/binstall) | Integrada ao Cargo |
| Execução | Um processo por teste | Threads dentro de um binário |
| Velocidade | Frequentemente mais rápida em suítes grandes | Baseline |
| Doctests | Não executados (use cargo test) | Sim |
| Recursos de CI | Retries, particionamento, saída JUnit | Saída básica |
| Saída | Concisa, status por teste | Saí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.