Что такое глобальные государства? Как они влияют на тестируемость и как их избежать? - PullRequest
3 голосов
/ 19 января 2011

Перечислите различные глобальные состояния, такие как глобальная переменная, одноэлементный объект и т. Д.,

Я прочитал, что они влияют на тестируемость кода.Можете ли вы объяснить альтернативы глобальным состояниям, которые помогают улучшить тестируемость кода?

Ответы [ 3 ]

4 голосов
/ 19 января 2011

Глобальные переменные и синглтоны настолько похожи с точки зрения тестируемости, что их не нужно обрабатывать отдельно. Хороший ОО-дизайн должен быть похож на кирпичи Lego, которые объединяются, чтобы создать получившуюся систему. Основная проблема с глобалами заключается в том, что вы теряете изоляцию. Когда вы получаете доступ к своим соавторам с помощью глобальных или единичных элементов, классы больше не являются отдельными блоками, которые вы можете легко взять и реорганизовать, использовать отдельно или повторно использовать в другом проекте. Когда вы берете какой-то класс, который зависит от глобалов, вы перетаскиваете остальную часть дизайна с ним. При тестировании это создает проблемы, потому что вы должны предпринять дополнительные шаги, чтобы обрезать соединения между вашим классом и его соавторами, чтобы вы могли проверить его изолированно. (Я написал подробнее об этом в своем блоге.)

Хорошим решением проблемы является предоставление зависимостей класса извне. Вы просто вводите какой-то механизм (возможно, простой класс), который возьмет все изолированные блоки и соединит их с графом объектов, составляющим ваше приложение. Это и есть Инверсия Контроля и Внедрение Зависимостей.

2 голосов
/ 19 января 2011
1 голос
/ 19 января 2011

Нет различных глобальных состояний.Либо что-то является глобальным состоянием, либо это не так.Анти-шаблон Singleton просто устраняет различные головные боли при инициализации, но это то же самое, что глобальная переменная.

Как избежать глобального состояния?Сделайте некоторое локальное состояние и передайте ссылку или указатель на него.В подавляющем, подавляющем большинстве случаев глобальное состояние не нужно. есть некоторые экземпляры необходимого глобального состояния, такие как куча, но они очень редки, и если вам нужно спросить, то вы почти наверняка не знаете достаточно, чтобы знать, когда это правильно.

...