Quando si ha un'integrazione continua che esegue i test ad ogni commit, una best practice comune è far passare tutti i test in qualsiasi momento (ovvero "non interrompere la build").
Trovo alcuni problemi con questo:
Ad esempio, non è possibile aiutare un progetto open source creando test corrispondenti ai ticket. So che se propongo una richiesta pull a un progetto open source contenente un test non riuscito, la build verrà contrassegnata come non riuscita e il progetto non vorrà che venga unito nel suo repository perché "interromperà la build".
E non credo sia una brutta cosa avere test falliti nel tuo repository , è come avere problemi aperti nel tuo tracker. Queste sono solo cose che aspettano di essere risolte.
Lo stesso vale in un'azienda. Se si lavora con TDD, non è possibile scrivere test, eseguire il commit e quindi scrivere il codice logico che soddisfa il test. Ciò significa che se ho scritto 4-5 test sul mio laptop, non posso impegnarli prima di andare in vacanza. Nessuno può riprendere il mio lavoro. Non riesco nemmeno a "condividerli" con un collega se non inviandoli ad esempio via e-mail. Impedisce inoltre di lavorare con una persona che scrive i test, l'altra che scrive il modello.
Tutto questo per dire: sto abusando / fraintendendo il processo di costruzione / integrazione continua? Mi sembra che "passare" / "non passare" sia un indicatore troppo stretto.
C'è un modo per rendere compatibile l'integrazione continua e TDD?
Forse esiste una soluzione / pratica standard per distinguere "nuovi test" (che possono fallire) e "test di regressione" (che non dovrebbero fallire perché erano soliti funzionare)?