Не уверен, что вы подумали, что это ответ или просто длинный комментарий. : -)
Ваши тесты работают хорошо, потому что они вам что-то говорят. Они говорят: «Это неправильное использование статического c экземпляра».
Статика всегда подозрительна, хотя и не всегда плоха. Плохо то, что вы используете stati c для реализации шаблона синглтона таким образом, что впоследствии вы не можете его контролировать. То есть, ваши индивидуальные экземпляры сами решают, какой кеш (синглтон) использовать, а не говорят, что использовать.
Как подсказывает @Vaccano, вам лучше использовать какое-то внедрение зависимости. Переведите это на «Скажите каждому объекту, какой кеш использовать, вместо того, чтобы он сам разбирался в этом». Это одна из тех вещей, которые требуют небольших предварительных вложений, чтобы избежать проблем в будущем.
В качестве отступления ... нет ничего плохого в изменении приложения, чтобы сделать его более тестируемым. Тестируемость - это еще одна из тех «способностей», которые определяют хороший дизайн программного обеспечения. Хитрость заключается в том, чтобы изменить его, чтобы улучшить программное обеспечение, обычно упрощая, а не усложняя его.