A juzgar por el diagrama, el Producto es una clase de datos tontos, sin funcionalidad para probar. Entonces comenzaría a escribir pruebas para (e implementar, estilo TDD) primero Line y luego Order, en la escala de dependencia. Por lo general, es sensato probar sus clases de nivel inferior antes de comenzar a trabajar en clases de nivel superior (es decir, que dependen del nivel inferior). Esto hace que la detección de errores sea más eficiente.
Si necesita usar objetos simulados depende de las dependencias reales de la clase probada. Si se trata de clases simples que puede crear instancias y configurar fácilmente con cualquier información / estado deseado requerido para sus pruebas, no necesita simulacros. (Este parece ser el caso de su diseño de ejemplo aquí.) Sin embargo, si alguna de las dependencias es difícil de inicializar / tiene dependencias extensas en sí misma / tiene efectos secundarios indeseables / depende de un recurso externo como un DB, entonces tiene sentido para usar un objeto simulado en su lugar.