Как абстрагировать статические классы - PullRequest
0 голосов
/ 08 марта 2012

У меня есть статический класс.Я могу изменить его и сделать так, чтобы он расширял интерфейс \ абстрактный класс.

Он содержит

  • много элементов readonly и consts.
  • staic методы.

Чтобы сделать этот код тестируемым, я хочу

  1. Разделить его на DTO и Manager.
  2. Абстрагировать каждый из них.Но как это сделать, поскольку классы статичны?

Ответы [ 2 ]

2 голосов
/ 08 марта 2012

На мой взгляд, есть две вещи, для которых статические классы хороши:

  1. , обеспечивающие глобальные функции / алгоритмы (которые не должны зависеть от состояния - так называемые чистые функции)
  2. удерживают глобальныеdata

Если вы смоделируете методы там, чтобы они были чистыми, вы можете проверить их сразу.Глобальные данные (ваши константы и члены только для чтения), с другой стороны, не нуждаются в проверке, поскольку они должны быть получены указанными методами.

Так что, если ваши статические методы используют глобальные данные из вашего класса, просторефакторинг их, чтобы включить эти данные в качестве параметров в метод, перегрузить их простыми обертками, передающими ваши глобальные данные, и протестировать новые - теперь чистые - функции.Позаботьтесь о том, чтобы включить в свои методы такие вещи, как данные базы данных или системное время (DateTime.Now) и аналогичные данные о побочных эффектах.

Если список параметров попадает в большой рефакторинг, метод превращается в класс, где некоторые/ большинство параметров инкапсулированы в новые поля классов - всегда помните S из SOLID (единая ответственность) - только загромождайте все в класс MyStaticGlobals / singelton, если вы проверяете детали в отделении.

1 голос
/ 08 марта 2012

Один из вариантов - преобразовать используемый статический класс в обычный класс. В ваше основное приложение вы добавляете синглтон, чтобы один и тот же экземпляр использовался повсюду, чтобы синглетон фактически превращал экземпляр в глобальный. Но при тестировании вы можете создать экземпляр по требованию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...