Мы пытаемся спроектировать нашу систему так, чтобы она была тестируемой, и в большинстве случаев она была разработана с использованием TDD. В настоящее время мы пытаемся решить следующую проблему:
В разных местах нам необходимо использовать статические вспомогательные методы, такие как ImageIO и URLEncoder (оба являются стандартными Java API) и различные другие библиотеки, которые состоят в основном из статических методов (например, библиотеки Apache Commons). Но крайне сложно протестировать те методы, которые используют такие статические вспомогательные классы.
У меня есть несколько идей для решения этой проблемы:
- Используйте фиктивный фреймворк, который может имитировать статические классы (например, PowerMock). Это может быть самое простое решение, но почему-то хочется сдаться.
- Создайте инстанцируемые классы-оболочки вокруг всех этих статических утилит, чтобы их можно было внедрить в классы, которые их используют. Это звучит как относительно чистое решение, но я боюсь, что в итоге мы создадим очень много этих классов-обёрток.
- Извлеките каждый вызов этих статических вспомогательных классов в функцию, которую можно переопределить, и протестируйте подкласс класса, который я на самом деле хочу протестировать.
Но я продолжаю думать, что это просто должна быть проблема, с которой сталкиваются многие люди при выполнении TDD - поэтому уже должны быть решения этой проблемы.
Какова лучшая стратегия для того, чтобы классы, которые используют эти статические помощники, тестировались?