Когда один класс использует функциональность другого класса, часто происходит в объектно-ориентированном программировании. Это называется делегированием, и именно так мы заставляем вещи работать:
После тестирования обоих классов очень легко проверить некоторые функции дважды:
Если мы что-то изменим в том, как рассчитывается плата за заказ — мы затормозим обе спецификации.
Что делает OrderReport, так это сохраняет рассчитанные значения в базе данных для последующего отображения. Это то, что мы предполагаем проверить, а не сами расчеты. Мы можем добиться этого, смоделировав OrderCalculator:
Теперь обе спецификации независимы, поэтому изменение расчетов не повлияет на отчетность.