Когда один класс использует функциональность другого класса, часто происходит в объектно-ориентированном программировании. Это называется делегированием, и именно так мы заставляем вещи работать:

После тестирования обоих классов очень легко проверить некоторые функции дважды:

Если мы что-то изменим в том, как рассчитывается плата за заказ — мы затормозим обе спецификации.

Что делает OrderReport, так это сохраняет рассчитанные значения в базе данных для последующего отображения. Это то, что мы предполагаем проверить, а не сами расчеты. Мы можем добиться этого, смоделировав OrderCalculator:

Теперь обе спецификации независимы, поэтому изменение расчетов не повлияет на отчетность.