Las pruebas unitarias se refieren a lo que está probando, TDD a cuando está probando.
Los dos son ortogonales.
Prueba de unidad significa, bueno, probar unidades individuales de comportamiento. Una unidad de comportamiento individual es la unidad de comportamiento más pequeña posible que se puede probar 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 lo escribe.
TDD significa (nuevamente, algo obvio) dejar que sus pruebas impulsen su desarrollo (y su diseño). Puede hacerlo con pruebas unitarias, pruebas funcionales y pruebas de aceptación. Por lo general, usas los tres.
La parte más importante de TDD es la D central . Dejas que las pruebas te lleven . Las pruebas le dicen qué hacer, qué hacer a continuación, cuando haya terminado. Te dicen cuál será la API, cuál es 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 prerrequisito para poder dejar que las pruebas dirijan el desarrollo).