Это почти всегда о зависимостях.
Большая часть кода зависит от внешних систем, таких как базы данных, файловые системы, почтовые клиенты, сети и т. Д. Также распространены зависимости от основных внутренних систем (например, модуля проверки орфографии или механизма пересылки ...)
Если эти зависимости не могут быть легко заменяемыми, тогда система становится трудной для тестирования.
Классы, которые вызывают статику и синглтоны, являются худшими нарушителями, но любой класс, который не принимает свои зависимости через конструктор или свойства, будет сложно протестировать.
Есть несколько законных ситуаций, которые трудно проверить:
- параллелизм
- Пользовательский интерфейс - вот почему наблюдается тенденция к архитектуре MVC, которая создает модели представления, которые можно легко тестировать. Фактическое отображение сведено к минимуму - это называется скромным диалогом или шаблоном скромного объекта в тестовой литературе.