Судя по диаграмме, Product - это тупой класс данных, без функциональности для тестирования. Поэтому я бы начал писать тесты для (и реализовывать в стиле TDD) сначала Line, а затем Order, вверх по лестнице зависимостей. Обычно целесообразно, чтобы ваши классы более низкого уровня были проверены перед началом работы в классах более высокого уровня (т.е. которые зависят от уровня более низкого уровня). Это делает обнаружение ошибок более эффективным.
Нужно ли вам использовать фиктивные объекты, зависит от реальных зависимостей тестируемого класса. Если это простые классы, которые вы можете легко создать и настроить с любыми требуемыми данными / состоянием, необходимыми для ваших тестов, вам не нужны макеты. (Это, кажется, имеет место для вашего примера разработки здесь.) Однако, если какую-либо из зависимостей трудно инициализировать / имеет обширные зависимости сама / имеет нежелательные побочные эффекты / зависит от внешнего ресурса, такого как БД, тогда имеет смысл вместо этого использовать фиктивный объект.