La domanda fa specifico riferimento al "test white box". È qui che i test hanno una conoscenza approfondita della struttura interna del codice e affermano il comportamento ad ogni passo piuttosto che l'input / output / effetto collaterale (test della black box). Sebbene JUnit sia eccellente per fare entrambe le cose, è necessario disporre di ulteriori framework aggiuntivi per poterlo fare nel contesto di un test unitario.
EasyMock e JMock sono buoni framework per Fai questo. Tendo a favorire JMock.
A rischio di iniziare un dibattito sugli OT, dovresti riflettere attentamente sulle implicazioni dei test della scatola bianca. I test di white box sono intimamente legati al tuo codice (ovviamente), e se non usati con attenzione, i framework di simulazione possono rendere i tuoi test piuttosto complicati, difficili da leggere e tendenzialmente più fragili durante il refactoring.
Tendo ad attenermi a un mix di entrambi. I test della scatola nera, ove possibile, e i test della scatola bianca applicati con parsimonia al codice più rischioso / più complicato.
Ovviamente i framework sopra elencati possono anche essere usati nei black box test dove il numero di classi contributive (iniettate) è ampio e lo stub semplice diventa ingombrante.
Riguardo al TDD - è principalmente un approccio di design per migliorare la scrittura del codice, piuttosto che un semplice modo di scrivere test. I test che hai alla fine sono un risultato importante, ma inoltre l'approccio mira a migliorare il design e la struttura della tua applicazione.