Ну, вы можете думать о кеше как о зависимости - и передавать экземпляр (возможно, тот же экземпляр) во все, что ему нужно. Это то, что я бы сделал в ситуации, когда я уже использовал внедрение зависимостей.
Это облегчит тестирование тех классов, которым необходим кеш - вы можете создать новый кеш для каждого теста, и вам не придется беспокоиться об очистке существующего. Вы также можете распараллеливать тесты, не беспокоясь о том, что два теста портят друг друга кеш. Кроме того, это делает зависимость кеша более понятной.
(Независимо от того, используете ли вы интерфейс для представления кэша, как предлагает cdhowie, зависит от вас. У вас нет , хотя, если бы вы это сделали, классы были бы отделены от их зависимостей больше. Если ваш кеш очень прост и вы не против использовать производственную реализацию в тестах, то может не стоить извлекать интерфейс.)