Каков наиболее «проверяемый» способ использования статической справочной информации в приложении? - PullRequest
2 голосов
/ 19 сентября 2011

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

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

Мои вопросы по юнит-тестированию для новичков:

Как получить данные в статический ссылочный класс, не создавая зависимости от файла конфигурации?

Как мне сделать этот статический эталонный класс тестируемым?

1 Ответ

1 голос
/ 19 сентября 2011

Вы можете создать интерфейс для своего класса конфигурации, а затем зависеть от этого интерфейса вместо какой-то конкретной реализации (это называется Принцип инверсии зависимости ):

interface ISomeData
{
  IEnumerable<string> YourData {get;}
}

class SomeData
{
  // This class is a singleton that could read
  // all apropriate data from application configuration file into SomeData
  // instance and then return this instance in following property
  public static ISomeData {get;}
}

class YourClass
{
  private readonly ISomeData _someData;

  public YourClass(ISomeData someData)
  {
    _someData = someData;
  }

  // You can even create additional parameterless constructor that will use
  // your singleton
  pbulic YourClass()
    : this(SomeData.Instance)
  {}
}

И тогда выВы можете легко создать модульный тест, потому что вы можете «смоделировать» ваш интерфейс ISomeData с помощью поддельной реализации и передать экземпляр этого фиктивного объекта в конструктор YourClass.что-то вроде Unity, которое могло бы помочь реализовать все это.

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