Создание фиктивных объектов
Я создал простой графический интерфейс в WPF. Я хотел бы показать там некоторые данные, полученные из базы данных. Но пока у меня есть только графический интерфейс и несколько функций, которые делают простые вычисления на основе полученных данных. Я знаю, что моя цель - создать фиктивные объекты, которые бы генерировали "ложные" данные, но я не знаю, с чего начать. Не могли бы вы сказать мне, как создать один из них, тогда я мог бы создать аналогично остальные. Вот мой класс, который делает вычисления:
public Statistic showUsersPostCount(Options options)
{
Query q = (Query)this.client.DoQuery();
q.AddAuthor(options.Login);
q.SetSinceDate(options.DateFrom);
q.SetUntilDate(options.DateTo);
q.AddTitleWord(options.Discussion);
List<Entity> list = (List<Entity>)q.PerformQuery();
Statistic statistic = new Statistic();
statistic.UsersPostCount = list.Count;
return statistic;
}
эта функция возвращает некоторую простую статистику. Но у меня нет кода для класса Query. Как я могу издеваться над объектом этого класса?
3 ответа
С предоставленным кодом... Вы не можете, чтобы смоделировать его, вам нужен какой-то способ предоставления альтернативного объекта для зависимости (в данном случае это объект.client).
Как таковой, этот метод имеет только одну входную "опцию", но это имеет относительно минимальное влияние на код.
Кроме того, вы утверждаете, что демонстрируете пример класса - но это не так - вы показываете только метод с именем showUsersPostCount.
Как уже упоминали другие, ваш код не может быть смоделирован как есть... по крайней мере, с помощью стандартных инструментов. Всегда есть родинки, которые гордятся тем, что позволяют вам "издеваться над немодным". Кроты позволят вам издеваться над этим методом, как есть.
Тем не менее, если вам приходится прибегать к Moles, чтобы высмеивать вещи, которыми вы управляете внутри (инструмент действительно был разработан для насмешки внешних зависимостей, таких как базы данных и файлы и тому подобное), вам, вероятно, следует подумать о том, чтобы сделать свой дизайн более гибким. Тестируемый (то есть тестируемый без Moles) дизайн, скорее всего, в целом будет хорошим.
Предполагая, что ваш код - это метод внутри класса, который вы хотите смоделировать, вашим первым шагом будет создание интерфейса для реализации класса, если вы еще этого не сделали.
Затем вы можете передать свой интерфейс (а не конкретный класс) в фальшивый фреймворк (я использовал Moq, но я предполагаю, что nmock работает очень похоже). Затем вы можете заполнить фиктивные данные, которые вы хотите, чтобы ваши свойства / методы возвращали через среду имитации.