IMHO TDD è principalmente una tecnica whitebox e, penso che sia più una tecnica di implementazione che una tecnica di test. Viene applicato dallo sviluppatore che scrive il codice in piccole iterazioni "write test, write code, refactor", quindi da qualcuno che conosce esattamente le parti già implementate e le parti mancanti del "soggetto in prova".
Ogni volta che lo sviluppatore che applica TDD crea un test per una funzione, ha piena conoscenza dell'implementazione già esistente, della prossima caratteristica mancante, del prossimo caso limite mancante o dei percorsi del codice ancora scoperti. Ciò avrà indubbiamente una grande influenza in base alle prove che crea e quali no.
In effetti, c'è anche un elemento black box in TDD: ogni volta che crei una nuova funzione pubblica da testare, devi pensare alla firma della funzione o all'API dal punto di vista di un utente di tale funzione o API primo. E ogni volta che aggiungi un nuovo test per una funzionalità, il tuo "soggetto in prova" non supporta ancora, puoi farlo senza aver deciso come implementare la funzionalità in dettaglio. Ma IMHO che la parte black box è molto diversa da un vero "black box test", in cui un tester esterno che potrebbe non essere nemmeno uno sviluppatore non ha alcuna conoscenza circa l'implementazione di un programma.
Vedi anche: scatola nera o test della scatola bianca - che cosa fai prima?