Unit Testing se refiere a qué estás probando, TDD a cuando estás probando.
Los dos son ortogonales.
Prueba de unidad significa, bueno, probar unidades de comportamiento individuales. Una unidad individual de comportamiento es la unidad más pequeña posible de comportamiento que puede probarse individualmente de forma aislada. (Sé que esas dos definiciones son circulares, pero parecen funcionar bastante bien en la práctica).
Puede escribir pruebas unitarias antes de escribir su código, después de escribir su código o mientras escribe su código.
TDD significa (de nuevo, algo obvio) dejar que tus pruebas impulsen tu desarrollo (y tu diseño). Puede hacerlo con pruebas unitarias, pruebas funcionales y pruebas de aceptación. Usualmente, usas los tres.
La parte más importante de TDD es la D central. Dejas que las pruebas te conduzcan . Las pruebas le dicen qué hacer, qué hacer a continuación, cuando haya terminado. Te dicen cuál será la API, cuál será el diseño. (Esto es importante: TDD no se trata de escribir pruebas primero. Hay muchos proyectos que escriben pruebas primero, pero no practican TDD. Escribir pruebas primero es simplemente un requisito previo para poder permitir que las pruebas guíen el desarrollo).