La pregunta hace referencia específica a la "prueba de caja blanca". Aquí es donde sus pruebas tienen un conocimiento íntimo de la estructura interna de su código y afirman el comportamiento en cada paso en lugar de solo la entrada / salida / efecto secundario (prueba de caja negra). Si bien JUnit es excelente para hacer ambas cosas, necesita más marcos adicionales para hacerlo dentro del contexto de una prueba unitaria.
EasyMock y JMock son buenos marcos para hacer esto. Tiendo a favor de JMock.
A riesgo de comenzar un debate OT, debe pensar cuidadosamente sobre las implicaciones de las pruebas de caja blanca. Las pruebas de recuadro blanco están íntimamente ligadas a su código (obviamente), y si no se usan con cuidado, los marcos burlones pueden hacer que sus pruebas sean bastante complicadas, difíciles de leer y tienden a ser más frágiles cuando se refactoriza.
Tiendo a mantener una mezcla de ambos. Las pruebas de recuadro negro siempre que sea posible y las pruebas de recuadro blanco se aplican con moderación a códigos más arriesgados / complicados
Por supuesto, los marcos enumerados anteriormente también se pueden usar en pruebas de recuadro negro donde el número de clases contribuyentes (inyectadas) es grande y el troquelado simple se vuelve difícil de manejar.
Con respecto a TDD, es principalmente un enfoque de mejora del diseño para escribir código, en lugar de simplemente una forma de escribir pruebas. Las pruebas que tiene al final son un resultado importante, pero además, el enfoque está destinado a mejorar el diseño y la estructura de su aplicación.