Al lavoro, uno dei miei progetti riguarda principalmente il trasferimento di dati trasmessi da un client esterno e la persistenza in un database. È un'app enterprise Java che utilizza JPA e la maggior parte della nostra logica ruota attorno alle operazioni CRUD.
La maggior parte dei nostri bug riguarda l'APP in un modo o nell'altro.
- Esempio 1: se si fa clic due volte sul pulsante Salva, JPA potrebbe tentare di inserire la stessa entità nel database una seconda volta, causando una violazione della chiave primaria.
- Esempio 2: recuperare un'entità dal database, modificarlo e provare ad aggiornare i suoi dati. JPA potrebbe tentare di creare una nuova istanza invece di aggiornare quella precedente.
Spesso la soluzione deve aggiungere / rimuovere / modificare un'annotazione JPA. Altre volte ha a che fare con la modifica della logica DAO.
Non riesco a capire come ottenere fiducia nel nostro codice usando unit test e TDD. Non sono sicuro se è perché i test unitari e il TDD non funzionano bene o se sto affrontando il problema in modo errato.
I test unitari sembrano sbagliati perché riesco a scoprire questi problemi solo in fase di esecuzione e ho bisogno di distribuirli su un server app per riprodurre i problemi. Di solito deve essere coinvolto il database che considero al di fuori della definizione di un unit test: si tratta di test di integrazione.
TDD sembra una scelta sbagliata perché il circuito di feedback deploy + test è così lento che mi rende molto improduttivo. Il ciclo di feedback deploy + test impiega più di 3 minuti, ed è solo se eseguo i test specificamente sul codice che sto scrivendo. Per eseguire tutti i test di integrazione sono necessari oltre 30 minuti.
C'è un codice al di fuori di questo stampo e lo collaudo sempre ogni volta che posso. Ma la maggior parte dei nostri bug e i più grandi intervalli di tempo coinvolgono sempre JPA o il database.
C'è un'altra domanda che è simile , ma se seguissi il consiglio starei avvolgendo la parte più instabile del mio codice (JPA) e testando tutto tranne che. Nel contesto della mia domanda, mi troverei nella stessa brutta situazione. Qual è il prossimo passo dopo aver concluso l'APP? IMO quella domanda è (forse) un passo per rispondere alla mia domanda, ma non una risposta ad essa.
unit testing != TDD
)