0%
Os dados de teste

Dados de teste

Builder de teste, isolamento, transações revertidas e conjuntos de dados que envelhecem mal.

10-15 min

Os dados de teste

Este teste falha. Descubra por quê em dez segundos:

@Test
void une_commande_expediee_ne_peut_plus_etre_annulee() {
    Client client = new Client(1L, "Alice", "alice@example.com", "12 rue des Lilas",
                               "75011", "Paris", "FR", true, false, null,
                               LocalDate.of(2024, 1, 1), Statut.ACTIF, 0, null);
    Commande commande = new Commande(10L, client, List.of(
        new Ligne(1L, "REF-1", 2, new BigDecimal("19.99"), new BigDecimal("0.20"))),
        LocalDateTime.now(), StatutCommande.EXPEDIEE, null, null, "FR", false);

    assertThatThrownBy(() -> service.annuler(commande)).isInstanceOf(CommandeExpedieeException.class);
}

Impossível. O único detalhe que importa — StatutCommande.EXPEDIEE — está afogado em meio a dezoito valores sem relação com a intenção do teste. E no dia em que um campo for adicionado ao construtor, os oitenta testes construídos sobre esse modelo deixarão de compilar de uma só vez.

Essa é a dívida mais traiçoeira de uma suíte de testes: ela não aparece na cobertura nem no tempo de execução, mas triplica o custo de escrita de cada novo teste e torna cada falha ilegível. Um bom objeto de teste deixa visível o que importa e invisível o que não importa. O restante desta lição mostra como fazer isso e depois trata do segundo problema dos dados de teste: o isolamento entre testes, em que as soluções fáceis escondem compromissos que é preciso conhecer.

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!