Quando si ha un'integrazione continua che esegue i test ad ogni commit, una best practice comune è far passare tutti i test in ogni momento (ovvero "non interrompere la compilazione").
Ho riscontrato alcuni problemi con questo:
Ad esempio, non è possibile aiutare un progetto open source creando test corrispondenti ai ticket. So che se propongo una richiesta di pull a un progetto open source contenente un test non riuscito, la compilazione verrà contrassegnata come non riuscita e il progetto non lo vorrà unito al suo repository perché "interrompe la compilazione".
E Non credo che sia una brutta cosa avere test falliti nel tuo repository , è come avere problemi aperti nel tuo tracker. Queste sono solo cose che devono essere risolte.
Lo stesso vale per un'azienda. Se lavori con TDD, non puoi 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 portatile, non posso impegnarli prima di andare in vacanza. Nessuno può riprendere il mio lavoro. Non riesco nemmeno a "condividerli" con un collega se non mandandoli via e-mail per esempio. Inoltre impedisce di lavorare con una persona che scrive i test, l'altra sta scrivendo il modello.
Tutto ciò 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 l'integrazione continua e TDD compatibili?
Forse esiste una soluzione / pratica standard per distinguere tra "nuovi test" (che possono fallire) e "test di regressione" (che dovrebbero non fallire perché erano abituati a lavorare)?